Erstellung eines Makros, um die Basiskarte neu zu laden.

Hallo

Ich möchte meine Basemaps aktualisieren, die in einem PDM gespeichert sind, also ohne die MyCAD-Tools oder meine PDM-Tools.
Hat schon mal jemand ein Makro in diesem Stil gemacht?
Ich kenne mich mit VBA nicht allzu gut aus, aber das Makro für Dateinamen oder Pfade zu retuschieren, ist etwas, das ich machen kann. Hier sind meine Grunddaten.

  • alles wird in einem PDM gespeichert, sogar die Planvorlagen.
  • Der PDM ist unter C: Der einzige Pfad für alle Nutzer, die Vorlagen und die Basemap sind im selben Ordner.
  • Die Vorlage (drwdot) ruft 5 verschiedene Basemaps (SLDDRT) auf.
  • Die Dateinamen ändern sich nicht, ich aktualisiere sie im PDM.
  • SolidWorks 2022 vorerst.

Im manuellen Modus mache ich die Eigenschaft auf der Basiskarte, bleibe auf der ausgewählten Basiskarte, lade neu und dann wird die Cartridge aktualisiert.

Die Idee ist, ein Makro zu erstellen, das dies automatisch macht (neu laden und speichern), und dieses Makro dann in einen PDM-Workflow zu integrieren, um das Bulk-Update durchzuführen. So kann ich auch meine PDF-Generierung im Flow aufbewahren.

Ich weiß nicht, ob das möglich ist oder ob es jemand gemacht hat, vielen Dank im Voraus für eure Hilfe.

Hallo

Ich persönlich verwende diesen Codetyp, aber nicht in Interaktion mit Solidworks PDM (die Nutzer haben das Makro zur Verfügung, um die Änderung vorzunehmen, wenn sie die Pläne ändern).

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

Es sollte gesehen werden, dass es über den Workflow in eine Aktion integriert wird, aber auch daran gedacht wird, dass der Tresorordner immer mit der neuesten Version im Benutzer-Cache liegt, sonst wird die neueste Basemap nicht angewendet.
Meinerseits sind alle SW-Dokumentvorlagen aus der Verpackung gefertigt.

1 „Gefällt mir“