Wie aktualisiere ich Variablen, die einem Makro zugeordnet sind?

Hallo

Ich habe gerade mein Konto erstellt und stelle meine allererste Frage. Vielen Dank für Ihre Nachsicht, wenn ich Details zu meiner Frage vergesse oder wenn sie bereits gestellt wurde...

Das Problem ist ganz einfach und ich verstehe nicht, warum es nicht funktioniert.

Ich arbeite mit SolidWorks PDM 2018 Sp4. Ich habe eine PDM-Aufgabe (Makro) erstellt, die ich auf .slddrw-Dateien ausführe, um die Datei automatisch zu aktualisieren.

Der Auftrag extrahiert die Datei, wird über Solidworks geöffnet, aktualisiert , gespeichert, geschlossen und automatisch archiviert. Alles funktioniert perfekt, AUSSER dem Aktualisieren der zugeordneten Variablen.

Damit meine ich, dass ich über PDM Variablen zugeordnet habe, so dass, wenn Sie sie in eine .sldprt / .sldasm ändern, dies die .slddrw-Datei beeinflusst. Das funktioniert sehr gut, und wie üblich müssen Sie nur die .slddrw-Datei speichern und die Variablen im Plan werden in die Teile-/Baugruppendatei aktualisiert.

Aber hier ist mein Problem, wenn ich dieses Speichern über ein Makro mache, werden die Variablen nicht aktualisiert.

Ich verwende swModel.ForceRebuild3 und swModel.EditRebuild3 für das Update, aber nichts hilft. Wenn ich die 3D ändere, werden die Ansichten gut aktualisiert, aber nicht die Variablen, die im Schriftfeld angezeigt $PRP.

Wenn jemand eine Idee hat, bin ich interessiert, weil mir die Ideen ausgehen...

Vielen Dank im Voraus und einen schönen Tag.

Hallo
Führen Sie den Umbau des MEP durch?
Zeigen Sie uns Ihren Code.

1 „Gefällt mir“

Hallo

Ich habe gerade "swModel.Save" auf einem einfachen SolidWorks-Makro getestet, das auf Solidworks mit einer offenen Ebene ausgeführt wird, und es aktualisiert die zugeordneten Variablen gut, wie ein einfaches Strg+S.

Hier ist der vollständige Code (Skript in der PDM-Aufgabe), danke:

 

Option Explizit

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim boolstatus als boolescher Wert
Fehler so lange dimmen
Dim lWarnungen so lange
pdmVault als Objekt dimmen
Dim strFullPath als Zeichenfolge
Dim strFullPathWithoutExt As String
Dim strFolderPath als Zeichenfolge
Dim strFileType As String
Dim intFileType As Integer
Dim i As Integer
Dim strFileName As String
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim Msg, Stil, Titel, Ctxt, Antwort

Sub Main()

    'Makro initialisieren
    strFullPath = "<Dateipfad>"
    strFolderPath = "<Pfad>"

    'Erfasst nur den Dateinamen
    i = InStrRev(strFullPath, "\")
    strFileName = Rechts(strFullPath, Len(strFullPath) - i)

    ' Greift FullPath ohne die Erweiterung ab, um den Fehler mit UnlockFile und UPPERCASE anstelle von Kleinbuchstaben zu beheben (z. B. SLDDRW / slddrw)
    strFullPathWithoutExt = Links (strFullPath, Len(strFullPath) -6)

    'Beschränken Sie das Makro auf SolidWorks Dateien
    strFileType = LCase(Rechts(strFullPath, 6))

    Case strFileType auswählen
        Feld "sldprt"
            intFileType = 1
        Gehäuse "sldasm"
            intFileType = 2
        "Slddrw"-Box
            intFileType = 3
        Fall Else
            Msg = "Dateiformatfehler!" + Chr(13) + Chr(10) + "*.sldprt, *.sldasm, *.slddrw only!" + Chr(13) + Chr(10) + "Datei " +  strFileName + " wird ignoriert."   ' Nachricht definieren.
            Style = vbMsgBoxSetForeground + vbCritical    ' Schaltflächen definieren.
            Title = "STOP!"    ' Titel definieren.
            Antwort = MsgBox(Nachricht, Stil, Titel)
            Sub beenden
    Ende Auswahl

    'Tresorobjekt erstellen
    Set pdmVault = CreateObject("ConisioLib.EdmVault")
    pdmVault.Login "admin", "***********", "**********"    

    'Ordnerobjekt erstellen
    Dim-Ordner als Objekt 'IEdmFolder5 IEdmFolder11 EdmObject_Folder
    Set folder = pdmVault.GetFolderFromPath(strFolderPath)
 
    'Dateiobjekt erstellen
    Dim-Datei als Objekt
    Legen Sie file = pdmVault.GetFileFromPath(strFullPathWithoutExt + strFileType, Ordner) fest

    "Auschecken
    Wenn Falsch = Datei. IsLocked dann
        Datei. LockFile folder.ID, 0
    Oder
        Msg = "Fehler: Datei " + strFileName + " bereits extrahiert von: " + file.LockedByUser.Name + " !"    ' Nachricht definieren.
        Style = vbMsgBoxSetForeground + vbCritical    ' Schaltflächen definieren.
        Title = "STOP!"    ' Titel definieren.
        Antwort = MsgBox(Nachricht, Stil, Titel)
        Sub beenden
    Ende, wenn

    'Modell öffnen, speichern und schließen
    Legen Sie swApp = Application.SldWorks fest
    swApp.Visible = Falsch
    Set swModel = swApp.OpenDoc(strFullPath, intFileType)
    swModel.ViewZoomtofit2
    swModel.ForceRebuild3 False 'False rebuil all und True rebuil only the top level
    swModel.EditRebuild3

    swModel.Speichern
    'boolstatus = swModel.Save3(swSaveAsOptions_Silent, lFehler, lWarnungen)
    swApp.CloseDoc strDateiname

    "Einchecken
    Datei. UnlockFile 0, "Automatisches Update", 64

Ende Sub

Nun, ich habe gerade den Code und die Erklärung von Visiativ erhalten.

Damit dies funktioniert, muss das Makro die PDMSW.dll Datei laden. Seien Sie vorsichtig, wenn Sie diesen Code wiederverwenden möchten, stellen Sie sicher, dass sich die Datei hier PDMSW.dll: C:\Programme\SolidWorks Enterprise PDM\PDMSW.dll


macro_pdm_mettre_a_jour_-_visiativ.txt