Erstellung eines Makroblocks aus einer 2D-Skizze in einem Teil

Hallo

Ich möchte ein Makro (SW2019) erstellen, um automatisch Blöcke aus den 2D-Skizzen zu erstellen.
Skizzen sind ein einzelner Layer in einer DXF-Datei.

Also öffne ich die dxf und am Ende habe ich verschiedene 2D-Skizzen.

Hier ist der Code des Makros, das durch die Aufzeichnung mit Kommentaren generiert wird...:

Dimmen swApp als Objekt

Teil als Objekt dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long

Sub main()

Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc

"Auswahl der Skizze 'obere Stütze'
boolstatus = Part.Extension.SelectByID2("oberste Presse", "SKETCH", 0, 0, 0, Falsch, 0, Nichts, 0)
myBlockDefinition als Objekt dimmen
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Erstellen des Blocks

"Auswahl der Skizze 'Bottom Points'
boolstatus = Part.Extension.SelectByID2("untere Tipps", "SKETCH", 0, 0, 0, Falsch, 0, Nichts, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Erstellen des Blocks

'Auswahl der Skizze 'Wedges pm'
boolstatus = Part.Extension.SelectByID2("cales pm", "SKETCH", 0, 0, 0, False, 0, Nichts, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Erstellen des Blocks

Ende Sub

Das Verzeichnis der Registrierung wird in den Dokumentoptionen definiert.
Es werden aber keine Blöcke aufgezeichnet...
Könnte mir bitte jemand einen Hinweis geben? Vielen Dank im Voraus
Fred

Hallo
Sie muss am Ende des Vorgangs gespeichert werden.
Save-Methode (ISketchBlockDefinition) - 2022 - SOLIDWORKS API-Hilfe

1 „Gefällt mir“

Vielen Dank!
Ich habe es versucht, aber da ich kein Spezialist bin, habe ich Schwierigkeiten, die Methode anzuwenden.
Ein wenig Hilfe wäre willkommen.

Re
Fügen Sie am Ende des Codes Folgendes hinzu:

bRet = swSketchBlockDef.Save(NomDeFichier+Chemin)

Gleich danach:

Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing)

Der Dateiname muss xxx.sldblk lauten

Tut mir leid, ich kann nicht gut darin sein...

Hier ist mein Code:
Sub main()

Dimmwert: Als boolescher Wert
Dim bRet als boolescher Wert

Legen Sie swApp = Application.SldWorks fest

Set Part = swApp.ActiveDoc

Dim-Verzeichnis als Zeichenfolge
dir = Teil.GetPfadName()
dir = left(dir, InStrRev(dir, ""))

"Auswahl der Skizze 'obere Stütze'
boolstatus = Part.Extension.SelectByID2("oberste Presse", "SKETCH", 0, 0, 0, Falsch, 0, Nichts, 0)
Dir = Verzeichnis & "support top.sldblk"

myBlockDefinition als Objekt dimmen
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Erstellen des Blocks
bRet = myBlockDefinition.Save(Dir)

Ich erhalte die Fehlermeldung "runtime error ‹ 91 ›:
Objektvariable oder Blockvariable mit nicht definiert"

Wenn ich Schritt für Schritt vorgehe, ist meine "myBlockDefinition" gleich "nichts" vor dem Speichern. Liegt es daran, dass mein Block leer wäre? Trotzdem wähle ich meine Skizze gut aus...

Vielen Dank für Ihre Geduld und Reaktionsfähigkeit.

Anstatt gegen diese Zeile Einspruch zu erheben:

Dim myBlockDefinition as Object

Stellen:

Dim myBlockDefinition As SldWorks.SketchBlockDefinition
1 „Gefällt mir“

Hallo @fgauvreau
In der Tat machen Sie einen Fehler bei der Auswahl,
Die Funktion makesketchfromselected() benötigt eine Skizzenentität, nicht die Skizze selbst
Andernfalls verwenden Sie mackesketchblockfromscketch()

1 „Gefällt mir“

Prima!! Es funktioniert perfekt
Vielen Dank für Ihre Hilfe