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