Aktualisierung der Makrokassette auf mehreren Blättern

Hallo an alle

Ich habe ein Makro entworfen, das das Update meiner Cartridge über ein Benutzerformular ermöglicht, das hier zu finden ist.

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. :wink:

Vielen Dank

Hallo

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

Hallo

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.

Wissen Sie, wie das geht?

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.

1 „Gefällt mir“

Ok danke.
die Grundkarten-/MEP-Vorlage Ich habe im Moment nur eine erstellt, aber ich werde die anderen danach machen (damit es :wink: funktioniert).

Ich gehe hier durch, um die Notizen zu " benennen "?
image

Ich habe über den Formulareditor nachgedacht, um ihn weniger " intuitiv " zu finden

Ja, Sie müssen durch "Text im Fenster bearbeiten" gehen oder einfach auf die Notiz doppelklicken, um sie zu bearbeiten (wie eine einfache Notiz).

Ok danke. Es ist vollbracht.

image

Wie kann ich in meinem Code auf diese Eigenschaften verweisen?

Sie müssen mit benutzerdefinierten Eigenschaften spielen, siehe das Beispiel unter diesem Link Abrufen von benutzerdefinierten Eigenschaften für das Konfigurationsbeispiel (VBA) - 2022 - SOLIDWORKS API-Hilfe

1 „Gefällt mir“

Ok, danke für Ihre Hilfe, ich werde mich damit befassen.

Hallo

Ich stecke fest. :frowning: Im Beispiel gibt es

Set cusPropMgr = config.CustomPropertyManager

Zeile, die nur funktioniert, wenn Sie den Code mit einer Freigabe ... Ich bin Mitglied eines MEP, daher kann die Code-Suite nicht erstellt werden.

Was ist zu tun?

Hallo
Es ist das gleiche Prinzip.
Sie benötigen diese beiden Deklarationen:

    Set swModelDocExt = swModel.Extension
    Set swCustProp = swModelDocExt.CustomPropertyManager("")

2 „Gefällt mir“

Ok, danke, mir muss etwas fehlen...

Option Explizit

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("")

Hallo

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.

2 „Gefällt mir“

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
2 „Gefällt mir“

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. :grinning:
image

2 „Gefällt mir“

Hallo

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.

Hallo

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. :wink: