Hoe kan ik variabelen bijwerken die aan een macro zijn toegewezen?

Hallo

Ik heb net mijn account aangemaakt en ik stel mijn allereerste vraag. Bedankt dat je toegeeflijk bent als ik details over mijn vraag vergeet of als deze al is gesteld...

Het probleem is vrij eenvoudig en ik begrijp niet waarom het niet werkt.

Ik werk met SolidWorks PDM 2018 Sp4. Ik heb een PDM (macro) taak gemaakt, die ik op .slddrw-bestanden uitvoer om het bestand automatisch bij te werken.

De taak pakt het bestand uit, opent via Solidworks, werkt automatisch bij, bewaart, sluit en archiveert. Alles werkt perfect BEHALVE het bijwerken van de in kaart gebrachte variabelen.

Daarmee bedoel ik dat ik via PDM variabelen in kaart heb gebracht, zodat wanneer je ze verandert in een .sldprt / .sldasm, dit het .slddrw-bestand beïnvloedt. Dit werkt heel goed, en zoals gewoonlijk hoeft u alleen maar het .slddrw-bestand op te slaan en de variabelen in het plan worden bijgewerkt naar het onderdeel-/assemblagebestand.

Maar hier is mijn probleem, als ik dit opslaan via een macro doe, worden de variabelen niet bijgewerkt.

Ik gebruik swModel.ForceRebuild3 en swModel.EditRebuild3 voor de update, maar niets helpt. Als ik de 3d verander, worden de weergaven goed bijgewerkt, maar niet de variabelen $PRP weergegeven in het titelblok.

Als iemand een idee heeft dat ik geïnteresseerd ben, want ik ben bijna op...

Bij voorbaat dank en een fijne dag verder.

Hallo
Doet u de reconstructie van het Europarlementariër?
Laat ons je code zien.

1 like

Hallo

Ik heb zojuist "swModel.Save" getest op een eenvoudige SolidWorks-macro, uitgevoerd op Solidworks met een open vlak, en het werkt de toegewezen variabelen goed bij, zoals een eenvoudige Ctrl + S.

Hier is de volledige code (Script in de PDM-taak), bedankt:

 

Optie Expliciete

Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim boolstatus als Booleaanse
Dim lErrors zo lang
Dim lWaarschuwingen zo lang mogelijk
Dim pdmVault als object
Dim strFullPath als snaar
Dim strFullPathWithoutExt als snaar
Dim strFolderPath als tekenreeks
Dim strFileType als tekenreeks
Dim intFileType als geheel getal
Dim i als geheel getal
Dim strFileName als tekenreeks
Dim swCustPropMgr As SldWorks.CustomPropertyManager
dim msg, stijl, titel, ctxt, reactie

Sub Hoofd()

    'Macro initialiseren'
    strFullPath = "<Bestandspad>"
    strFolderPath = "<Pad>"

    'Pakt alleen de bestandsnaam
    i = InStrRev(strFullPath, "\")
    strFileName = Right(strFullPath, Len(strFullPath) - i)

    ' Grijpt FullPath zonder de extensie om de bug op te lossen met UnlockFile en HOOFDLETTERS in plaats van kleine letters (bijv. SLDDRW / slddrw)
    strFullPathWithoutExt = Links (strFullPath, Len(strFullPath) -6)

    'Beperk de macro tot SolidWorks-bestanden
    strFileType = LCase(Rechts(strFullPath, 6))

    Selecteer Case strFileType
        Vak "SLDPRT"
            intFileType = 1
        Geval "sldasm"
            intFileType = 2
        Vak "Slddrw"
            intFileType = 3
        Geval anders
            Msg = "Fout in bestandsindeling!" + Chr(13) + Chr(10) + "*.sldprt, *.sldasm, *.slddrw alleen!" + Chr(13) + Chr(10) + "Bestand " +  strFileName + " wordt genegeerd."   ' Definieer bericht.
            Stijl = vbMsgBoxSetForeground + vbCritical    ' Definieer knoppen.
            Title = "STOP!"    ' Definieer titel.
            Reactie = MsgBox(Msg, Stijl, Titel)
            Sub afsluiten
    Einde selecteren

    'Kluisobject maken
    Set pdmVault = CreateObject("ConisioLib.EdmVault")
    pdmVault.Login "admin", "***********", "**********"    

    'Mapobject maken
    Map dimmen als object 'IEdmFolder5 IEdmFolder11 EdmObject_Folder
    Map instellen = pdmVault.GetFolderFromPath(strFolderPath)
 
    'Bestandsobject maken
    Bestand dimmen als object
    Bestand instellen = pdmVault.GetFileFromPath(strFullPathWithoutExt + strFileType, map)

    'Uitchecken
    Indien Onwaar = bestand. IsLocked dan
        bestand. LockFile folder.ID, 0
    Anders
        Msg = "Fout: Bestand " + strFileName + " al geëxtraheerd door: " + file.LockedByUser.Name + " !"    ' Definieer bericht.
        Stijl = vbMsgBoxSetForeground + vbCritical    ' Definieer knoppen.
        Title = "STOP!"    ' Definieer titel.
        Reactie = MsgBox(Msg, Stijl, Titel)
        Sub afsluiten
    Einde als

    'Model openen, opslaan en sluiten
    Stel swApp = Toepassing.SldWorks in
    swApp.Visible = Onwaar
    Stel swModel = swApp.OpenDoc(strFullPath, intFileType) in
    swModel.ViewZoomtofit2
    swModel.ForceRebuild3 False 'False rebuil alles en True rebuil alleen het hoogste niveau
    swModel.BewerkenHerbouwen3

    swModel.Opslaan
    'boolstatus = swModel.Save3(swSaveAsOptions_Silent, lErrors, lWarnings)
    swApp.CloseDoc strFileName

    'Inchecken
    bestand. UnlockFile 0, "Automatische update", 64

Einde Sub

Nou, ik heb zojuist de code en uitleg van Visiativ ontvangen.

Om dit te laten werken, moet de macro het PDMSW.dll bestand laden. Wees voorzichtig, als u deze code opnieuw wilt gebruiken, zorg er dan voor dat het bestand hier PDMSW.dll zijn: C:\Program Files\SolidWorks Enterprise PDM\PDMSW.dll


macro_pdm_mettre_a_jour_-_visiativ.txt