Tworzenie bloku makr ze szkicu 2D w części

Witam

Chcę zrobić makro (SW2019), aby automatycznie tworzyć bloki ze szkiców 2D.
Szkice są pojedynczą warstwą w pliku dxf.

Otwieram więc plik dxf i kończę z różnymi szkicami 2D.

Oto kod makra wygenerowany przez nagranie z komentarzami...:

Dim swApp As Object

Przyciemnij część jako obiekt
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc

"Wybór szkicu »górnej podpory«
boolstatus = Part.Extension.SelectByID2("góra naciśnięcie", "SZKIC", 0, 0, 0, Fałsz, 0, Nic, 0)
Dim myBlockDefinition As Obiekt
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Tworzenie bloku

"Wybór szkicu »dolnych punktów«
boolstatus = Part.Extension.SelectByID2("dolne końcówki", "SZKIC", 0, 0, 0, Fałsz, 0, Nic, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Tworzenie bloku

'Wybór szkicu »kliny pm«
boolstatus = Part.Extension.SelectByID2("cales pm", "SZKIC", 0, 0, 0, Fałsz, 0, Nic, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Tworzenie bloku

Koniec subwoofera

Katalog rejestracji jest zapisany w parametrach dokumentu.
Ale żadne bloki nie są nagrywane...
Czy ktoś mógłby mi dać jakiś trop? Z góry dziękuję
Fred

Witam
Należy go zapisać po zakończeniu procedury.
Metoda zapisywania (ISketchBlockDefinition) - 2022 - Pomoc SOLIDWORKS API

1 polubienie

Dziękuję bardzo!
Próbowałem, ale nie będąc specjalistą, mam problem ze stosowaniem metody.
Niewielka pomoc byłaby mile widziana.

Ponownie
Na końcu kodu dodaj to:

bRet = swSketchBlockDef.Save(NomDeFichier+Chemin)

Zaraz po:

Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing)

Nazwa pliku musi być xxx.sldblk

Przepraszam, nie mogę być w tym dobry...

Oto mój kod:
Sub main()

Wartość przyciemniona Jako wartość logiczna
Dim bRet As Boolean

Ustaw swApp = Application.SldWorks

Ustaw część = swApp.ActiveDoc

Dim dir As Ciąg
Dir = Part.GetPathName()
dir = left(dir, InStrRev(dir, ""))

"Wybór szkicu »górnej podpory«
boolstatus = Part.Extension.SelectByID2("góra naciśnięcie", "SZKIC", 0, 0, 0, Fałsz, 0, Nic, 0)
Dir = Katalog & "support top.sldblk"

Dim myBlockDefinition As Obiekt
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Tworzenie bloku
bRet = myBlockDefinition.Save(Dir)

Otrzymuję komunikat o błędzie "błąd wykonania ‹ 91 ›:
zmienna obiektowa lub zmienna blokowa z niezdefiniowaną"

Gdy krok po kroku mój "myBlockDefinition" jest równy "nic" przed zapisaniem. Czy to dlatego, że mój blok byłby pusty? a jednak dobrze dobieram szkic...

Dziękujemy za cierpliwość i responsywność.

Zamiast sprzeciwić się tej linii:

Dim myBlockDefinition as Object

Kłaść:

Dim myBlockDefinition As SldWorks.SketchBlockDefinition
1 polubienie

Witam @fgauvreau
Rzeczywiście, popełniasz błąd w wyborze,
Funkcja makesketchfromselected() potrzebuje encji szkicu, a nie samego szkicu
W przeciwnym razie użyj mackesketchblockfromscketch()

1 polubienie

Super!! Działa idealnie
Bardzo dziękuję za pomoc