Tworzenie makra do ponownego wczytania mapy bazowej

Witam

Chciałbym zaktualizować moje bazowe mapy przechowywane w PDM, określiłbym bez narzędzi mycad czy narzędzi pdm.
Czy ktoś kiedykolwiek tworzył makro w tym stylu?
Nie znam się za bardzo na VBA, ale retuszowanie makra dla nazw plików lub ścieżek to coś, co mogę zrobić. Oto moje podstawowe dane.

  • wszystko jest przechowywane w PDM, nawet szablony planów.
  • PDM jest pod C: czyli jedna ścieżka dla wszystkich użytkowników, szablony i mapa bazowa są w tym samym folderze.
  • Szablon (drwdot) wywołuje 5 różnych map bazowych (SLDDRT).
  • Nazwy plików się nie zmieniają, aktualizuję je w PDM.
  • Na razie SolidWorks 2022.

W trybie ręcznym robię właściwości na mapie bazowej, zostaję na wybranej mapie bazowej, przeładuję i karta się aktualizuje.

Chodzi o stworzenie makra, które robi to automatycznie (przeładowanie i zapis), a następnie integrację tego makra z workflow PDM, aby wykonać masową aktualizację. Dzięki temu mogę kumulować z generowaniem PDF w trakcie procesu.

Nie wiem, czy to możliwe, czy ktoś już to zrobił, z góry dziękuję za pomoc.

Witam

Z mojej strony używam tego typu kodu, ale nie w interakcji z Solidworks PDM (użytkownicy mają dostępne makro, by wprowadzać zmiany podczas modyfikacji planów).

Dim swApp           As SldWorks.SldWorks
Dim swModel         As SldWorks.ModelDoc2
Dim swDraw          As SldWorks.DrawingDoc
Dim bRet            As Boolean
Dim vSheetNameArr   As Variant
Dim vSheetName      As Variant
Dim vSheetProps     As Variant
Dim stemplatepath   As String


Const cDirTemplate = "xxx" 'Mettre le chemin d'accès aux fonds de plan slddrt
Const cTemplateA4 = "A4 - iso.slddrt"
Const cTemplateA3 = "A3 - iso.slddrt"
Const cTemplateA2 = "A2 - iso.slddrt"
Const cTemplateA1 = "A1 - iso.slddrt"
Sub ReloadTemplate()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
vSheetNameArr = swDraw.GetSheetNames
    For Each vSheetName In vSheetNameArr
        bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
        Set swSheet = swDraw.GetCurrentSheet
        vSheetProps = swSheet.GetProperties
        If vSheetProps(0) = "7" Then
            stemplatepath = cDirTemplate & cTemplateA4
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "8" Then
            stemplatepath = cDirTemplate & cTemplateA3
           bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "9" Then
            stemplatepath = cDirTemplate & cTemplateA2
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        ElseIf vSheetProps(0) = "10" Then
            stemplatepath = cDirTemplate & cTemplateA1
            bRet = swDraw.SetupSheet4(swSheet.GetName, vSheetProps(0), 12, vSheetProps(2), vSheetProps(3), True, stemplatepath, 0#, 0#, "")
            swSheet.ReloadTemplate False
            swModel.ForceRebuild3 (False)
        End If
    Next
bRet = swDraw.ActivateSheet(vSheetNameArr(0))
End Sub

Być widzianym integrującym go z akcją przez workflow, ale jednocześnie myśleć, że folder vault zawsze ma najnowszą wersję w pamięci podręcznej użytkownika, bo inaczej nie zastosuje się najnowszej mapy bazowej.
Z mojej strony wszystkie szablony dokumentów SW są gotowe do wyjęcia.

1 polubienie