Een macro aanmaken om de basismap opnieuw te laden

Hallo

Ik wil graag mijn basemaps bijwerken die in een PDM zijn opgeslagen, ik specificeer zonder de mycad-tools of mijn pdm-tools.
Heeft iemand ooit een macro in deze stijl gemaakt?
Ik weet niet veel van VBA, maar het bijwerken van de macro voor bestandsnamen of paden is iets wat ik kan doen. Hier is mijn basisgegevens.

  • alles wordt opgeslagen in een PDM, zelfs de plantemplates.
  • De pdm staat onder C: dus het ene pad voor alle gebruikers, de templates en basemap zitten in dezelfde map.
  • Het sjabloon (drwdot) roept 5 verschillende basemaps (SLDDRT) aan.
  • De bestandsnamen veranderen niet, ik werk ze bij in de PDM.
  • SolidWorks 2022 voor nu.

In handmatig doe ik property op de basemap, ik blijf op de geselecteerde basemap, ik laad opnieuw en dan werkt de cartridge bij.

Het idee is om een macro te maken die dit automatisch doet (herladen en opslaan) en die macro vervolgens te integreren in een PDM-workflow om de bulkupdate uit te voeren. En zo kan ik ook mijn PDF-generatie in de flow opleveren.

Ik weet niet of dit mogelijk is of dat iemand het al heeft gedaan, alvast bedankt voor je hulp.

Hallo

Voor mijn deel gebruik ik dit soort code, maar niet in interactie met Solidworks PDM (gebruikers hebben de macro beschikbaar om de wijziging door te voeren bij het aanpassen van de plannen).

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

Om te zien dat je het via de workflow in een actie integreert, maar ook denk dat de vault-map altijd de nieuwste versie in de cache van de gebruiker heeft, anders wordt de nieuwste basemap niet toegepast.
Wat mij betreft zijn alle SW-documenten sjablonen standaard beschikbaar.

1 like