Es ruft die vorhandenen Informationen in der Kassette ab und ermöglicht Aktualisierungen, ohne dass alles manuell durchgeführt werden muss. Es funktioniert sehr gut, aber wenn es nur ein Brett gibt.
Mein Problem liegt in der Duplizierung dieser Informationen auf einem möglichen 2., 3. usw. ... Planke, falls vorhanden. In dem Wissen, dass die Notizen der Grundkarte, die auf Platte 1 aktualisiert werden, plötzlich nicht mehr denselben Namen auf den hinzugefügten Platten haben.
Wenn jemand eine Idee hat, wie man das macht, bin ich dafür.
Ist es der Wunsch, von einer Seite zur anderen nicht die gleichen Namen zu haben? Wenn dies nicht der Fall ist, ist es am einfachsten, Eigenschaften mit diesen Notizen zu verknüpfen, so dass wir nur die Eigenschaften aktualisieren und es sich auf den anderen Folios entfaltet
Nein, das ist eine Beobachtung. Durch das Hinzufügen einer neuen Tafel in der MEP haben die neuen Notizen nicht denselben Namen. Es heißt "Objekt détail1137@Fond von plan1", aber auf der neuen Platte ist es "Objekt détail1137@Fond von plan3", der Name des Blattes ändert sich. und ich konnte diese Einstellungen nicht verwalten.
Eine effektive Verknüpfung mit einer Immobilie wäre tatsächlich einfacher.
Zunächst müssen Sie also Vorlagen für die Grundkarte und die Zeichnung erstellen. Sobald dies erledigt ist, sollten die Notizen in der Grundkarte, die sich auf die Zeichnung selbst beziehen sollten, wie folgt geschrieben werden: §PRP:xxxx (xxxx ist der Name der Eigenschaft) Die exakt gleichen Hintergrundpläne und Notizen in allen Seitenformaten (z.B. von A4 bis A0) vereinfachen das Makro erheblich. Ich denke, Sie hätten dies auch im Eigenschaftenformular-Editor tun können, anstatt über ein Makro.
Dim swApp als SldWorks.SldWorks Dim swModel As SldWorks.DrawingDoc Dim-Konfiguration als SldWorks.Configuration Dim swCustProp As SldWorks.CustomPropertyManager Dim lRetVal so lange Dim vPropNames als Variante Dim vPropTypes als Variante Dim vPropValues als Variante ValOut als String dimmen Dim ResolvedValOut als Zeichenfolge Dim wasResolved As Boolean Dim linkToProp als boolescher Wert Dimmen aufgelöst als Variante Dim linkProp als Variante Dim nNbrProps so lange Sonne j So lang Dim custPropType So lange Dim bRet als boolescher Wert
Sub mainTest()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set config = swModel.GetActiveConfiguration
' Set cusPropMgr = config. CustomPropertyManager
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
In den Zeichnungen gibt es keine Konfiguration. Grundsätzlich wäre der Code wie folgt (ich habe den Job vorgekaut, indem ich eine Verarbeitungsschleife für die Anwendung der Änderungen eingefügt habe)
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim swDraw As SldWorks.DrawingDoc
Dim bRet As Boolean
Dim iAddProp As Integer
Dim lretVal As Long
Dim sProp(11) As String
Sub Tableprop()
sProp(0) = "REV1": sProp(1) = "DATE1": sProp(2) = "NOM1": sProp(3) = "MODIF1"
sProp(4) = "REV2": sProp(5) = "DATE2": sProp(6) = "NOM2": sProp(7) = "MODIF2"
sProp(8) = "REV3": sProp(9) = "DATE3": sProp(10) = "NOM3": sProp(11) = "MODIF3"
End Sub
Sub mainTest()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Set2(sProp(i), "yyy")
End If
Next i
End Sub
Sie müssen eine Verarbeitung hinzufügen, um die Daten aus dem Formular in einer Tabellenvariablen abzurufen und alle möglichen Fälle zu behandeln (leere Felder, Überprüfen eines Feldes, das bereits mit demselben Wert aktualisiert wurde...) Das "yyy" müsste daher durch die Variable array ersetzt werden, die die Ergebnisse abruft.
Vielen Dank @Cyril für Ihre wertvolle Hilfe, nach ein wenig Recherche und Hartnäckigkeit habe ich es geschafft, den vollständigen Code zum Laufen zu bringen.
Ich füge unter den Teil des Codes ein, der den MEP aktualisiert und die vorhandenen Informationen im MEP abruft.
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim swDraw As SldWorks.DrawingDoc
Dim bRet As Boolean
Dim iAddProp As Integer
Dim lretVal As Long
Dim sProp(11) As String
Dim ValeursUsF(11) As String
Sub Tableprop()
sProp(0) = "REV1": sProp(1) = "DATE1": sProp(2) = "NOM1": sProp(3) = "MODIF1"
sProp(4) = "REV2": sProp(5) = "DATE2": sProp(6) = "NOM2": sProp(7) = "MODIF2"
sProp(8) = "REV3": sProp(9) = "DATE3": sProp(10) = "NOM3": sProp(11) = "MODIF3"
End Sub
Sub MajMEP()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Set2(sProp(i), ValeursUsF(i))
End If
Next i
End Sub
Sub TableValeurTableau()
'Chaque champs du userform
ValeursUsF(0) = TabRev.Bx0.Value: ValeursUsF(1) = TabRev.Bx1.Value: ValeursUsF(2) = TabRev.Bx2.Value: ValeursUsF(3) = TabRev.Bx3.Value
ValeursUsF(4) = TabRev.Bx4.Value: ValeursUsF(5) = TabRev.Bx5.Value: ValeursUsF(6) = TabRev.Bx6.Value: ValeursUsF(7) = TabRev.Bx7.Value
ValeursUsF(8) = TabRev.Bx8.Value: ValeursUsF(9) = TabRev.Bx9.Value: ValeursUsF(10) = TabRev.Bx10.Value: ValeursUsF(11) = TabRev.Bx11.Value
End Sub
Sub RecupValMEP()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
Dim Val As String
Dim resolved As Boolean
Dim Title As String
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Get5(sProp(i), False, ValeursUsF(i), Title, resolved)
End If
Next i
For i = 0 To UBound(ValeursUsF)
TabRev("Bx" & i).Value = ValeursUsF(i)
Next
End Sub
Schöne Zusammenarbeit. Und danke, dass Sie darüber nachgedacht haben, dem abgeschlossenen Makro beizutreten. Alles, was bleibt, ist, die beste Antwort zu validieren, dieses Thema abzuschließen.
Keine Sorge um Hilfe. Auf der anderen Seite denke ich, dass der Code vereinfacht oder zumindest optimiert werden sollte. Das Initialisieren der Variablen swApp in zwei verschiedenen Prozeduren kann zu einem Fehler führen. Wenn zwischen dem Auschecken der Werte und dem Aktualisieren keine Ausgabe von der Hauptprozedur vorhanden ist, kann der gesamte Code in die Hauptprozedur eingefügt werden:
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
Call Tableprop
Call TableValeurTableau
Ich habe auch ein wenig Schwierigkeiten zu verstehen, wofür dieser Teil des Codes gedacht ist:
For i = 0 To UBound(sProp)
If sProp(i) <> "" Then
lretVal = swCustProp.Get5(sProp(i), False, ValeursUsF(i), Title, resolved)
End If
Next i
Ich verstehe nicht wirklich, was Sie in diesem Codeausschnitt zu tun versuchen, da er danach nicht verwendet wird.
In der Tat ist es durchaus optimierbar. Ich werde versuchen, das zu tun. Vielen Dank
Der zweite Teil ermöglicht es mir, die Werte der Eigenschaften abzurufen, im Falle eines bereits ausgefüllten Plans, um sie in meinem Benutzerformular mit der folgenden Codezeile anzuzeigen.
For i = 0 To UBound(ValeursUsF)
TabRev("Bx" & i).Value = ValeursUsF(i)
Next
Es ist vielleicht nicht die beste Methode, aber sie hat den Vorteil, dass sie funktioniert.