Hallo, ik ben op zoek naar het lezen en bewerken van notities of attributen in VBA-blokken of instanties van blokken in SolidWorks-tekeningen.
Ik kan de blokobjecten of blokinstanties ophalen, maar na de volgende functies maak ik fouten aan:
swBlockDef.GetNotes
swBlockDef.GetNoteCount
met swBlockDef als SldWorks.BlockDefinition
of
swlockInst.GetAnnotation
swlockInst.GetAttributes
swlockInst.GetAttributeCount
swlockInst.GetAttributeValue
swlockInst.SetAttributeValue
met swlockInst als SldWorks.BlockInstance
In het verleden heb ik swBlockDef.GetNotes al met succes gebruikt, maar nu werkt het niet meer.
Heeft iemand een oplossing voor mij?
Bij voorbaat dank
Hallo en welkom;
Het zou gemakkelijker zijn als je (tussen tags) je hele macro zou posten...
Het lijkt erop dat SldWorks.BlockDefinition is verouderd sinds de versie van 2007:

https://help.solidworks.com/2022/english/api/sldworksapi/get_block_information_example_vb.htm?verRedirect=1
extract:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' OLD BLOCKS: Obsolete and not supported block
' interfaces as of SOLIDWORKS 2007
'Dim swBlockDef As SldWorks.BlockDefinition
'Dim swBlockInst As SldWorks.BlockInstance
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' NEW BLOCKS: New block interfaces as of SOLIDWORKS 2007
Dim swBlockDef As SldWorks.SketchBlockDefinition
Dim swBlockInst As SldWorks.SketchBlockInstance
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Het lijkt noodzakelijk om het te vervangen door:
SldWorks.SketchBlockDefinition
Met de attributen:
https://help.solidworks.com/2022/english/api/sldworksapiprogguide/Overview/Block_Definitions_and_Block_Instances.htm
Vriendelijke groeten.
Hallo
Ik gebruik SldWorks.SketchBlockDefinition en SldWorks.SketchBlockInstance
Ik kan de blok- en Blockinstance-objecten krijgen.
Het is daarna dat ik problemen heb...
Hallo
Je moet naar dit API-voorbeeld kijken: Voorbeeld van blokinformatie ophalen (VBA) - 2024 - SOLIDWORKS API Help
De noten in een blok worden benaderd in een variabele van het type variant.
Je zou deze code moeten proberen die al heel lang bestaat.
Aan mijn kant werkt het niet meer.
Dit betekent niet veel " het werkt niet meer ":
- Heeft u foutmeldingen? Zo ja, welke + screenshot.
- Welke veranderingen zijn er aangebracht tussen " het werkt " en " het werkt niet meer ".
- U hebt de huidige versie van Solidworks niet opgegeven.
De macro die ik je heb voorgesteld (die dezelfde is als die in @Cyril_f ( ... vervelende kopieermachine VAS
) werkt op mijn Solidworks 2022 sp4:
Hier is het resultaat...
File = XXXXXXctif_Brosses.SLDDRW
Block definition linked to file? Faux
File name:
Name of block instance: Orientation-3
Block instance(0):
Angle = 0 deg
Scale = 0,7
TextDisplay = 3
------------------------------------
Block definition linked to file? Faux
File name:
Name of block instance: logo revtech-3
Block instance(0):
Angle = 0 deg
Scale = 0,7
TextDisplay = 3
------------------------------------
1 like
Oeps, sorry. Uitgeput op dit moment, heb ik geen aandacht besteed aan de link in je antwoord.
Hallo
Hieronder staat de code die ik gebruik voor mijn tests
Wanneer vNote vNote() is als sldworks.note, komt runtime-foutcode 13 niet overeen
Wanneer vNote als variant is, is de regel vNote = swBlockDef.GetNotes geeft vNote gelijk aan leeg
En, de regel vNote = swlockInst.GetAttributes, dan foutcode ‹ - 670099352 (d80f1868) ›: Error Automation
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim SwSketchMgr As SldWorks.SketchManager
Dim vBlockDef() As SldWorks.BlockDefinition
Dim swBlockDef As SldWorks.BlockDefinition
Dim vBlockInst() As SldWorks.BlockInstance
Dim swlockInst As SldWorks.BlockInstance
Dim vNote As Variant
'Dim vNote() As SldWorks.Note
Dim swNote As SldWorks.Note
Dim i As Long
Dim j As Long
Dim k As Long
Dim Text As String
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
Set SwSketchMgr = swModel.SketchManager
vBlockDef = SwSketchMgr.GetSketchBlockDefinitions
If Not IsEmpty(vBlockDef) Then
For i = 0 To UBound(vBlockDef)
Set swBlockDef = vBlockDef(i)
Text = swBlockDef.Name
vNote = swBlockDef.GetNotes 'vide ou erreur
If Not IsEmpty(vNote) Then
For j = 0 To UBound(vNote)
swNote = vNote(j)
Text = swNote.GetText
Next
End If
vBlockInst = swBlockDef.GetInstances
If Not IsEmpty(vBlockInst) Then
For j = 0 To UBound(vBlockInst)
Set swlockInst = vBlockInst(j)
Text = swlockInst.Name
vNote = swlockInst.GetAttributes 'Erreur d'exécution '-670099352 (d80f1868)': Erreur Automation
If Not IsEmpty(vNote) Then
For k = 0 To UBound(vNote)
Set swNote = vNote(k)
Text = swNote.TagName
Next
End If
Next
End If
Next i
End If
End Sub
Hallo
Dus veel fouten in de code.
Hieronder staat de gecorrigeerde code die zou moeten werken (werkt op 2024 SP5), afkomstig uit de API-helpcode.
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim SwSketchMgr As SldWorks.SketchManager
Dim vBlockDef As Variant
Dim swBlockDef As SldWorks.SketchBlockDefinition
Dim vBlockInst As Variant
Dim swBlockInst As SldWorks.SketchBlockInstance
Dim vNote As Variant
Dim swNote As SldWorks.Note
Dim i As Long
Dim j As Long
Dim k As Long
Dim Text As String
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set SwSketchMgr = swModel.SketchManager
vBlockDef = SwSketchMgr.GetSketchBlockDefinitions
If Not IsEmpty(vBlockDef) Then
For i = 0 To UBound(vBlockDef)
Set swBlockDef = vBlockDef(i)
vNote = swBlockDef.GetNotes 'vide ou erreur
If Not IsEmpty(vNote) Then
For j = 0 To UBound(vNote)
Set swNote = vNote(j)
Text = swNote.GetText
Next
End If
vBlockInst = swBlockDef.GetInstances
If Not IsEmpty(vBlockInst) Then
For j = 0 To UBound(vBlockInst)
Set swBlockInst = vBlockInst(j)
Text = swBlockInst.Name
vNote = swBlockInst.GetAttributes
If Not IsEmpty(vNote) Then
For k = 0 To UBound(vNote)
Set swNote = vNote(k)
Text = swNote.TagName
Next
End If
Next
End If
Next i
End If
End Sub
Kortom, het declareren van variabelen die onjuist zijn:
Dim vBlockDef() As SldWorks.BlockDefinition
Variabeletype Variant en geen haakjes om op de naam van deze variabele te zetten.
Er ontbreekt een set van de swNote-variabele en vele andere.
1 like
Hallo
Je hebt gelijk over de ontbrekende sets op swNote = vNote(i)
Aan de andere kant, wanneer Dim vBlockDef als variant, krijg ik een foutmelding op de regel Set swBlockDef = vBlockDef(i), dat ben ik wanneer Dim vBlockDef() As SldWorks.BlockDefinition
Welke versie van SW?
Ik heb geen fouten op SW 2024.
De macro @Cyril_f werkt ook in Solidworks 2022.
Als je het over een fout hebt, vermeld dan het nummer (of maak een screenshot).
Ik zit in SW2022 sp5.0
Het is vreemd van mijn kant:
Als vNote als variant is, dan zijn vNote = swBlockDef.GetNotes of vNote = swlockInst.GetAttributes leeg
Wanneer vNote() Als SldWorks.Note, dan creëren dezelfde functies een runtime-fout 13: Type mismatch
We moeten kijken naar de referenties (Tools-> References).
De mijne zijn deze, maar mijn code bevat verschillende macro's die meer referenties nodig hebben dan nodig is voor de behoeften van de blokmacro.

Dan is een ander probleem dat mij al is overkomen, de versie van VBA die niet de juiste is en macOS-bedieningsfouten genereert
Ik heb net de test van de @Cyril_f macro op een oud bestand vóór 2007 ...
In dit geval zijn de variabelen effectief leeg.
=> In deze situatie moet u de informatie gebruiken die u in het voorbeeld heeft gegeven en die we u al twee keer hebben gepresenteerd:
https://help.solidworks.com/2022/english/api/sldworksapi/get_block_information_example_vb.htm?verRedirect=1
met:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' OLD BLOCKS: Obsolete and not supported block
' interfaces as of SOLIDWORKS 2007
'Dim swBlockDef As SldWorks.BlockDefinition
'Dim swBlockInst As SldWorks.BlockInstance
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' NEW BLOCKS: New block interfaces as of SOLIDWORKS 2007
Dim swBlockDef As SldWorks.SketchBlockDefinition
Dim swBlockInst As SldWorks.SketchBlockInstance
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Zonder je te willen beledigen, @Patrick_CHARDON , lijk je niet erg op je gemak te voelen bij variabele declaraties. Ik raad je aan om @Cyril_f te vertrouwen, bovendien werkt de macro met ons mee.
Wat wil je precies als informatie uit je bock halen, we kunnen je waarschijnlijk helpen maar als we niet echt weten wat je probeert te doen is het ingewikkeld... En nu draaien we in cirkels rond...
1 like