Favorieten voor het invoegen van macro's

Hallo allemaal,

Ik ben op zoek naar een annotatie uit de solidworks-ontwerpbibliotheek.

Ik laad constant de bibliotheeknotities en gebruik een gebruikersformulier om de gewenste notitie te selecteren 

 

Ik zit vast bij het invoegen van de notitie, ik heb de methode InsertAnnotationFavorite gebruikt  

Ik zou het in een specifieke  laag moeten kunnen invoegen : lagen worden gemaakt in de macrolaag

Een notitie met een subscript in een subscriptlaag

Opmerking in B-subscript tracering

C-indexnoot in C-indexlaag

Iemand een idee?

Bij voorbaat dank voor uw hulp

 

Vriendelijke groeten

 

Yannick

 


note.zip

Hallo Probeer dit:

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

of:

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

 

Hallo Hiëronymus,

Bedankt voor je feedback

Ik heb je macro in mijn lus geïntegreerd. De notitie is niet ingevoegd.

Als ik door de macro ga, laadt Set swAnn niets.

Als sjabloon = "Indice B" dan 

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

 

Weet je waar dit vandaan kan komen?

Bij voorbaat dank

 

Yannick


insert_indice.swp

swModel wordt niet gedeclareerd als een globale variabele.
dus ondanks dat het is toegewezen in Layer(), is het waardeloos in ChgtComboBox1()
we moeten toevoegen: Dim swModel als sldworks.modeldoc2 voor main()

In feite zijn er veel niet-aangegeven variabelen.
Mijn suggestie voegt toe: Expliciete optie
helemaal aan het begin van de macro en corrigeert eventuele rapportagefouten.

Declareer ook Layer() met: Sub Layer(void)
en roept het aan met: Laag aanroepen (leeg) of: Laag leeg
Hetzelfde geldt voor ChgtComboBox1()
Het zal de macro dwingen om te starten vanaf main()

Bedankt Jerome, de macro werkt perfect als je alle variabelen declareert

Ter informatie, wat betekent (leeg) en (leeg)?

Bedankt voor alles.

 

void => leeg, leeg => niets

Het is belangrijk dat een macro slechts één hoofdfunctie is (meestal hoofd()).

Een functie is secundair als deze een parameter heeft zoals (ByVal swModel As ModelDoc2). Als een functie secundair is maar geen parameter nodig heeft , is het de conventie om er een lege parameter aan toe te wijzen. (Ongeldig)