Makro eine CutList einfügen

Hallo ihr alle

Ich möchte ein VBA-Makro in SolidWorks erstellen, um die Aktualisierung der Schnittlisten in meinen Zeichnungen zu automatisieren.

Hier ist mein Hintergrund:

  • Ich arbeite oft mit bereits vorhandenen Zeichnungen und all meinen Ansichten.
  • Wenn ich das referenzierte Teil durch ein anderes Teil ersetze, wird die Schnittliste nicht automatisch aktualisiert.

Mein Ziel mit diesem Makro:

  1. Löschen Sie alle bestehenden Schweißlisten in der Zeichnung.
  2. Füge eine neue Schnittliste basierend auf Ansicht 1 der Zeichnung ein.
  3. Die neue Tabelle sollte idealerweise eine bestimmte Vorlage verwenden und den darin definierten Ankerpunkt respektieren.

Ich habe mehrere Ansätze mit InsertWeldmentTable, InsertWeldmentCutList oder InsertWeldmentTableAnnotationausprobiert, aber ich stoße immer auf 438- oder 91-Fehler, die mit der Ansichtsauswahl oder Methoden zusammenhängen, die in VBA nicht verfügbar sind.

Könnte mir jemand helfen, eine zuverlässige Methode in VBA zu finden, um:

  • Alte Cutlists löschen
  • Fügen Sie automatisch das neue Exemplar auf Ansicht 1 mit dem Vorlagen-Ankerpunkt ein

Vielen Dank im Voraus für eure Hilfe und eure Ratschläge! :wink:

Hallo;

Warum sollte man dieses Update in der Zeichnung machen, wenn Solidworks es automatisch im Raum macht?
image
Um mit " automatischer Aktualisierung der geschweißten Teileliste" in den Einstellungen der Vorlageneigenschaft Ihrer Zeichnungen verknüpft zu werden:


=> Das sollte dir ein Makro sparen...

In einem Raum, um die von @Maclane angegebenen Zeilen per Makro zu überprüfen:

Option Explicit

Public swApp As SldWorks.SldWorks
Public swModel As SldWorks.ModelDoc2
Public swPart As SldWorks.PartDoc
Public swBodyFolder As SldWorks.BodyFolder
Public swFeat As SldWorks.Feature

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel.GetType() = swDocumentTypes_e.swDocASSEMBLY Or swModel.GetType() = swDocumentTypes_e.swDocDRAWING Then
Debug.Print "Ne fonctionne que sur une pièce"
Set swModel = Nothing
Set swApp = Nothing
Exit Sub
End If

Set swPart = swModel

Set swFeat = swPart.FirstFeature

While Not swFeat Is Nothing
'Debug.Print ""
'Debug.Print "Nom de l'élément : "; swFeat.Name
'Debug.Print "Type de l'élément : "; swFeat.GetTypeName2
If swFeat.GetTypeName2 = "SolidBodyFolder" Then
    Set swBodyFolder = swFeat.GetSpecificFeature2
    swBodyFolder.SetAutomaticCutList (True)
    swBodyFolder.SetAutomaticUpdate (True)
    swBodyFolder.UpdateCutList
    swBodyFolder.GetAutomaticUpdate
End If
Set swFeat = swFeat.GetNextFeature()
Wend

Set swBodyFolder = Nothing
Set swFeat = Nothing
Set swPart = Nothing
Set swModel = Nothing
Set swApp = Nothing
End Sub

1 „Gefällt mir“

Hallo;

Ansonsten bietet die Solidworks API Hilfe diese Art von Makro zum Hinzufügen der Cutlist in die Zeichnung an:

'----------------------------------------------------------------------------
' Preconditions:
' 1. Verify that the specified cut list template exists.
' 2. Open public_documents\samples utorial\weldments\weldment_box2.sldprt.
' 3. Click File > Make Drawing from Part > OK > drag a view onto
'    the sheet > OK.
' 4. Expand the drawing view in the FeatureManager design tree.
' 5. Right-click weldment_box2 and select Open Part(weldment_box2.sldprt).
' 6. Right-click the Cut list folder and click Update Automatically.
' 7. Click Window > weldment_box2 - Sheet1*.
'
' Postconditions:
' 1. Inserts a weldment cut list table.
' 2. Examine the FeatureManager design tree and graphics area.
'
' NOTE: Because this part is used elsewhere, do not save changes.
'----------------------------------------------------------------------------
Option Explicit
Const WeldmentTableTemplate As String = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\cut list.sldwldtbt"

Sub Main()
  Dim swapp As SldWorks.SldWorks
  Dim oDrawing As DrawingDoc
  Dim swView As View
  Dim WMTable As SldWorks.WeldmentCutListAnnotation

  Set swapp = Application.SldWorks
  Set oDrawing = swapp.ActiveDoc
  Set swView = oDrawing.GetFirstView
  Set swView = swView.GetNextView

  ' Insert the weldment cut list table
  Set WMTable = swView.InsertWeldmentTable(False, 0.1996662889191, 0.1013905859662, swBOMConfigurationAnchor_TopLeft, "Default<As Welded>", WeldmentTableTemplate)
 

  End Sub
1 „Gefällt mir“