Jak zaktualizować zmienne zmapowane do makra?

Witam

Właśnie założyłem konto i zadaję pierwsze pytanie. Dziękuję za wyrozumiałość, jeśli zapomnę szczegółów mojego pytania lub jeśli zostało ono już zadane...

Problem jest dość prosty i nie rozumiem, dlaczego to nie działa.

Pracuję z SolidWorks PDM 2018 Sp4. Utworzyłem zadanie PDM (makro), które uruchamiam na plikach .slddrw w celu automatycznej aktualizacji pliku.

Zadanie wyodrębnia plik, otwiera go za pomocą Solidworks, aktualizuje , zapisuje, zamyka i archiwizuje automatycznie. Wszystko działa idealnie, POZA aktualizacją zmapowanych zmiennych.

Rozumiem przez to, że za pomocą PDM zmapowałem zmienne tak, że gdy zmienisz je na .sldprt / .sldasm, wpłynie to na plik .slddrw. Działa to bardzo dobrze i jak zwykle, wystarczy zapisać plik .slddrw, a zmienne w planie zostaną zaktualizowane do pliku części/złożenia.

Ale oto mój problem, jeśli zrobię ten zapis za pomocą makra, zmienne nie są aktualizowane.

Używam swModel.ForceRebuild3 i swModel.EditRebuild3 do aktualizacji, ale nic nie pomaga. Jeśli zmienię 3d, widoki są dobrze aktualizowane, ale nie zmienne $PRP wyświetlane w tabelce rysunkowej.

Jeśli ktoś ma jakiś pomysł, to jestem zainteresowany, bo mi się kończy...

Z góry dziękuję i życzę miłego dnia.

Witam
Czy zajmujecie się rekonstrukcją MEP?
Pokaż nam swój kod.

1 polubienie

Witam

Właśnie przetestowałem "swModel.Save" na prostym makrze SolidWorks, uruchamiam go w Solidworks z otwartą płaszczyzną i dobrze aktualizuje zmapowane zmienne, jak prosty Ctrl+S.

Oto kompletny kod (skrypt w zadaniu PDM), dzięki:

 

Opcja jawna

Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim boolstatus As Boolean
Dim lErrors tak długo
Dim lOstrzeżenia tak długo
Dim pdmVault jako obiekt
Dim strFullPath As String
Dim strFullPathWithoutExt jako ciąg
Dim strFolderPath As String
Dim strFileType As Ciąg
Dim intFileType As Integer
Dim i As Liczba całkowita
Dim strFileName As String
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim Msg, Styl, Tytuł, Ctxt, Odpowiedź

Sub Main()

    'Inicjalizacja makra
    strFullPath = "<Ścieżka do pliku>"
    strFolderPath = "<Ścieżka>"

    'Pobiera tylko nazwę pliku
    i = InStrRev(strFullPath, "\")
    strFileName = Right(strFullPath, Len(strFullPath) - i)

    ' Pobiera FullPath bez rozszerzenia, aby rozwiązać błąd za pomocą UnlockFile i WIELKICH LITER zamiast małych (np. SLDDRW / slddrw)
    strFullPathWithoutExt = Lewo (strFullPath, Len(strFullPath) -6)

    'Ogranicz makro do plików SolidWorks
    strFileType = LCase(Right(strFullPath, 6))

    Wybierz wielkość liter strFileType
        Skrzynka "sldprt"
            intFileType = 1
        Przypadek "sldasm"
            intFileType = 2
        Skrzynka "Slddrw"
            intFileType = 3
        Przypadek inny
            Msg = "Błąd formatu pliku!" + Chr(13) + Chr(10) + "*.sldprt, *.sldasm, tylko *.slddrw!" + Chr(13) + Chr(10) + "Plik " +  strFileName + " jest ignorowany."   ' Zdefiniuj wiadomość.
            Style = vbMsgBoxSetForeground + vbCritical    ' Zdefiniuj przyciski.
            Title = "STOP!"    ' Zdefiniuj tytuł.
            Odpowiedź = MsgBox(Wiadomość, Styl, Tytuł)
            Wyjdź z subwoofera
    Zakończ wybór

    'Utwórz obiekt repozytorium
    Ustaw pdmVault = CreateObject("ConisioLib.EdmVault")
    pdmVault.Zaloguj się "admin", "***********", "**********"    

    'Utwórz obiekt folderu
    Przyciemnij folder jako obiekt 'IEdmFolder5 IEdmFolder11 EdmObject_Folder
    Ustaw folder = pdmVault.GetFolderFromPath(strFolderPath)
 
    'Utwórz obiekt pliku
    Przyciemnij plik jako obiekt
    Ustaw plik = pdmVault.GetFileFromPath(strFullPathWithoutExt + strFileType, folder)

    – Sprawdź
    Jeśli Fałsz = plik. IsLocked Then
        plik. Plik blokujący folder.ID, 0
    Inaczej
        Msg = "Błąd: Plik " + strFileName + " już wyodrębniony przez: " + file.LockedByUser.Name + " !"    ' Zdefiniuj wiadomość.
        Style = vbMsgBoxSetForeground + vbCritical    ' Zdefiniuj przyciski.
        Title = "STOP!"    ' Zdefiniuj tytuł.
        Odpowiedź = MsgBox(Wiadomość, Styl, Tytuł)
        Wyjdź z subwoofera
    Zakończ jeżeli:

    "Otwórz model, zapisz i zamknij
    Ustaw swApp = Application.SldWorks
    swApp.Visible = Fałsz
    Ustaw swModel = swApp.OpenDoc(strFullPath, intFileType)
    swModel.ViewZoomtofit2
    swModel.ForceRebuild3 False 'False rebuil all i True rebuil tylko najwyższy poziom
    swModel.EditRebuild3 powiedział:

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

    "Zamelduj się
    plik. UnlockFile 0, "Automatyczna aktualizacja", 64

Koniec subwoofera

Cóż, właśnie otrzymałem kod i wyjaśnienie od Visiativ.

Aby to zadziałało, makro musi załadować plik PDMSW.dll. Bądź ostrożny, jeśli chcesz ponownie użyć tego kodu, upewnij się, że plik PDMSW.dll znajdować się tutaj: C:\Program Files\SolidWorks Enterprise PDM\PDMSW.dll


macro_pdm_mettre_a_jour_-_visiativ.txt