Ulubione adnotacje wstawiania makr

Witam wszystkich,

Chcę wstawić adnotację z biblioteki projektu solidworks.

Ciągle ładuję notatki z biblioteki i używam formularza użytkownika, aby wybrać  żądaną notatkę

 

Utknąłem podczas wstawiania notatki, użyłem metody   InsertAnnotationFavorite

Musiałbym być w stanie wstawić  go do określonej  warstwy: warstwy są tworzone w warstwie makr

Notatka indeksu dolnego w warstwie indeksu dolnego

B Indeks dolny uwaga w B Indeks dolny śledzenie

Nuta indeksu C w warstwie indeksu C

ktoś ma pomysł?

Z góry dziękuję za pomoc

 

Pozdrowienia

 

Yannicka

 


note.zip

Witam Spróbuj tego:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAnn As SldWorks.Annotation
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice A.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice A"
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice B.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice B"
Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\monDossierDeNotes\Indice C.sldnotestl", 0.2, 0.2, 0)
swAnn.Layer = "Indice C"
swModel.WindowRedraw
End Sub

lub:

Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAnn As SldWorks.Annotation
Dim NoteNames As Variant
Dim NoteFolder As String
Dim i As Integer
NoteNames = Array("Indice A", "Indice B", "Indice C")
NoteFolder = "C:\monDossierDeNotes\"
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
For i = 0 To 2
    Set swAnn = swModel.Extension.InsertAnnotationFavorite(NoteFolder & NoteNames(i) & ".sldnotestl", 0.2, 0.2, 0)
    swAnn.Layer = NoteNames(i)
Next
swModel.WindowRedraw
End Sub

 

Witaj Hieronim,

Dziękujemy za Twoją opinię

Zintegrowałem twoje makro z moją pętlą. Notatka nie zostanie wstawiona.

Kiedy przechodzę przez makro, Set swAnn niczego nie ładuje.

Jeśli szablon = "Indeks B" Następnie 

Set swAnn = swModel.Extension.InsertAnnotationFavorite("C:\sw-parameter\Blocks\Revision Index\B.sldnotestl Index", 0.2, 0.2, 0)
swAnn.layer = "Indeks B"
swModel.WindowRedraw

 

Czy wiesz, skąd to może pochodzić?

Z góry dziękuję

 

Yannicka


insert_indice.swp

swModel nie jest zadeklarowany jako zmienna globalna.
więc pomimo tego, że jest przypisany w Layer(), jest do bani w ChgtComboBox1()
musimy dodać: Dim swModel jako sldworks.modeldoc2 przed main()

W rzeczywistości istnieje wiele niezadeklarowanych zmiennych.
Moja sugestia, dodaje: Opcja jawna
na samym początku makra i koryguje ewentualne błędy w raportowaniu.

Zadeklaruj również Layer() za pomocą: Sub Layer(void)
i wywołuje go za pomocą: Call Layer(Empty) lub: Layer Empty
To samo dotyczy ChgtComboBox1()
Wymusi to uruchomienie makra z main()

Dziękuję Jerome, makro działa idealnie, gdy zadeklarujesz wszystkie zmienne

Dla mojej informacji, co oznaczają (void) i (empty)?

Dzięki za wszystko.

 

void => pusty, pusty => nic

Ważne jest, aby makro było tylko jedną główną funkcją (zwykle main()).

Funkcja jest drugorzędna, jeśli ma parametr taki jak (ByVal swModel As ModelDoc2). Jeśli funkcja jest pomocnicza , ale nie potrzebuje parametru, konwencją jest przypisanie jej pustego parametru. (Nieważny)