Blatterstellung / Neuladen der Grundkarte: Verwendung vorhandener Blöcke

Hallo SolidWorkers!

Wir haben ein Skript beim Öffnen von Zeichnungen (und eine Makroschaltfläche für den manuellen Start), um die Grundkarte auf allen Blättern in einer Zeichnung neu zu laden.

Die Grundkarte besteht aus 3 Blöcken (Kartusche, Lineal, Orientierungsmarkierung).

Ich habe festgestellt, dass das Skript, das die APIs SetUpSheet* und ReloadTemplate verwendet, für jedes Blatt die 3 Blöcke der Zeichnung dupliziert.

Während wir beim manuellen Hinzufügen eines Blattes oder beim Neuladen einer Grundkarte auf einem vorhandenen Blatt vom System aufgefordert werden, zu wählen, ob neue Blöcke umbenannt oder vorhandene verwendet werden sollen, scheint unser Skript diese Frage automatisch mit Ja zu beantworten:
image

Wie antworte ich automatisch mit Nein und nicht mit Duplikaten?
Welche APIs und/oder API-Parameterwerte kann ich verwenden, um das gewünschte Verhalten zu erreichen?

Wir haben Pläne, die bis zu 112 Seiten lang sein können; Am Ende haben wir 336 Blöcke im Baum.

Vielen Dank im Voraus.

Hallo Silver_Surfer,
Ohne Ihren Code zu teilen, ist es etwas kompliziert, ihn zu finden :stuck_out_tongue_winking_eye:

Der fragliche Code führt viele andere Dinge auf Solidworks-, SmarTeam- und anderen Ebenen aus, die für die Freigabe nicht relevant sind.
Der Teil dieses Codes, mit dem die Grundkarte neu geladen wird, ist mehr oder weniger derselbe (SetUpSheet-API-Parameter) wie in der Hilfe.

Aber hier ist der Code, der mir Probleme bereitet:

Sub main()


Dim swApp                       As SldWorks.SldWorks
Dim swModel                     As SldWorks.ModelDoc2
Dim swDraw                      As SldWorks.DrawingDoc
Dim swSheet                     As SldWorks.Sheet
Dim swView                      As SldWorks.View
Dim vSheetProps                 As Variant

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swSheet = swDraw.GetCurrentSheet
vSheetProps = swSheet.GetProperties

Dim size As String
If vSheetProps(0) = 7 Then
            '7 = A4 Portrait
            templateFormat = "A4.SLDDRT"
            size = "A4"
ElseIf vSheetProps(0) = 8 Then
            '8 = A3 Paysage
            templateFormat = "A3.SLDDRT"
            size = "A3"
ElseIf vSheetProps(0) = 9 Then
            '9 = A2 Paysage
            templateFormat = "A2.SLDDRT"
            size = "A2"
ElseIf vSheetProps(0) = 10 Then
            '10 = A1 Paysage
            templateFormat = "A1.SLDDRT"
            size = "A1"
ElseIf vSheetProps(0) = 11 Then
            '11 = A0 Paysage
            templateFormat = "A0.SLDDRT"
            size = "A0"
End If


boolstatus = swModel.SetupSheet5( _
    swSheet.GetName, _
    vSheetProps(0), _
    vSheetProps(1), _
    vSheetProps(2), _
    vSheetProps(3), _
    True, _
    templateFormat, _
    vSheetProps(5), _
    vSheetProps(6), _
    "Par défaut", _
    True _
)
               
swSheet.ReloadTemplate False
End Sub

Mit der API können Sie diese Wahl nicht haben.
Wenn Sie all diese Blöcke in Ihrem Baum vermeiden möchten, ist es am einfachsten, sie aus der Grundkarte zu entfernen und die Skizzen zu korrigieren (oder sie zu bemaßen und die Bemaßungen auszublenden).
Andernfalls können Sie einen Code erstellen, der alle Blöcke mit Ausnahme der Blöcke auf dem ersten Blatt entfernt, und sie dann in die folgenden Blätter einfügen. Dieser Ansatz hält sich an das gewünschte Verhalten, aber es ist etwas mehr Arbeit zu programmieren (obwohl...)