Solidworks 2019 - Makro zum automatischen Exportieren eines Makros nach Excel

Hallo

Ich habe ein Makro verwendet, das von einem anderen Benutzer gepostet wurde.

Ich habe schnell einen Fehler und gebe zu, dass ich kein Makrospezialist bin. Das Programm stürzt mit einem Run-Tume-Fehler 91 (Objekt Variable mit nicht gesetzter Blockvariable) in der Set-Anweisung swBOMFeature = swBOMAnnotation.BomFeature in Fettdruck ab

Können Sie mir sagen, was ich falsch mache und wie ich mein Problem lösen kann?

Vielen Dank im Voraus

Sub main()

Dim xlApp As Excel.Application
Legen Sie xlApp = Neue Excel.Anwendung fest
Dim wbk As Excel.Workbook
Dim sht As Excel.Arbeitsblatt

Mit xlApp
. Sichtbar = Wahr
Legen Sie wbk = fest. Arbeitsmappen.Hinzufügen
Setze sht = wbk. ActiveSheet (Englisch)
Enden mit

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swBOMAnnotation As SldWorks.BomTableAnnotation
Dim swBOMFeature As SldWorks.BomFeature
Dim boolstatus als boolescher Wert
BomType so lange dimmen
Konfiguration als Zeichenfolge dimmen
Dim TemplateName als Zeichenfolge
Dim TableTemplate als Zeichenfolge

Legen Sie swApp = Application.SldWorks fest

Festlegen von swModel = swApp.ActiveDoc
Legen Sie swModelDocExt = swModel.Extension fest


TemplateName = "C:\Benutzer\sal1chl\Desktop\test_nomenclature.sldbomtbt"

Stücklistentyp = swBomType_TopLevelOnly

Set swBOMAnnotation = swModelDocExt.InsertBomTable3(Vorlagenname, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True)
Set swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 Wahr

NumCol so lange dimmen
Dim NumRow so lange
Dimmen Sie so lange
Sun J So Lang

NumCol = swBOMAnnotation.ColumnCount
AnzahlZeile = swBOMAnnotation.ZeilenAnzahl

Für I = 0 bis NumRow
Für J = 0 TB NumCol
Sht. Zellen (I + 1, J + 1). Wert = swBOMAnnotation.Text(I, J)
Weiter J
Weiter I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, Wahr, 0, Nichts, 0)
swModel.EditDelete

swModel.ForceRebuild3 Wahr

Dim-Konfiguration als SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal so lange
ValOut als String dimmen
Dim ResolvedValOut als Zeichenfolge
Dim wasResolved As Boolean
Dim nNbrProps so lange
Dim vPropNames als Variante
Dim vPropTypes als Variante
Dim vPropValues als Variante
Dimmen aufgelöst als Variante
Dim custPropType So lange
Dim K so lange
Dim NameProperty als Zeichenfolge

Set cusPropMgr = swModelDocExt.CustomPropertyManager("")

nNbrProps = cusPropMgr.Anzahl
vPropNames = cusPropMgr.GetNames
Für K = 0 bis nNbrProps - 1
cusPropMgr.Get2 vPropNames(K), ValOut, AufgelöstValOut
custPropType = cusPropMgr.GetType2(vPropNames(K))
Wenn vPropNames(K) = "CARTOONIST" dann
PropertyName = AufgelöstValOut
Ende, wenn
Weiter K

Pfad als Zeichenfolge dimmen
path = About("USERPROFILE") & "\Desktop\" & swModel.GetTitle & "-" & PropertyName & ".xls"

Mit xlApp
WBK. Pfad "Speichern unter"
WBK. Schließen
. Verlassen
Enden mit

Ende Sub

Hallo

Ich denke, Sie sollten entweder Ihre Konfigurationsvariable initialisieren, bevor Sie Ihre BOM einfügen, z. B. Configuration = "" oder  Configuration durch "" in der Zeile Set swBOMAnnotation = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True) ersetzen.

Herzliche Grüße

1 „Gefällt mir“

Danke Roger für deine Antwort.

Ich stelle fest, dass ich die Zeile, die besagte, nicht kopiert hatte:

Konfiguration = "Standard"

Für mehr Flexibilität habe ich diese Zeile einfach geändert in 

Konfiguration = swApp.GetActiveConfigurationName(sDateiname)

indem man vorher gut

Const sFileName                 As String = "Test. SLDPRT"

Mein Problem tritt immer auf bei:

Set swBOMFeature = swBOMAnnotation.BomFeature

wobei swBOMFeature = Nichts

Zu Ihrer Information, in der vorherigen Zeile habe ich auch swBOMAnnotation=Nichts

Ist das normal?

Danke für Ihre Hilfe

 

Hallo

Erster Punkt: Sie müssen zuerst überprüfen, ob TemplateName = "C:\Users\sal1chl\Desktop\test_nomenclature.sldbomtbt" korrekt geschrieben ist, da es sonst in der Zeile Set swBOMFeature = swBOMAnnotation.BomFeature blockiert wird.

Zweiter Punkt: Wenn Sie das Makro auf einem Bauteil verwenden ("test. SLDPRT"), dann darf der BomType nicht "swBomType_TopLevelOnly" sein  und dann bleibt er in der Zeile "Set swBOMFeature = swBOMAnnotation.BomFeature" hängen, ändern Sie ihn in "swBomType_Indented", um zu überprüfen, ob er von dort kommt. Seltsam, ein Teil mit einer Nomenklatur versehen zu wollen!

Herzliche Grüße

1 „Gefällt mir“

Hallo Roger,

Ein großes Dankeschön, es funktioniert!

Wissen Sie, wie Sie den Namen der Assembly, in der ich dieses Makro ausführe, automatisch abrufen können?

Im Moment gebe ich ihm den Namen im Makro

Const sFileName                 As String = "test_assemblage. SLDASM"

Vielen Dank

 

Herzliche Grüße

 

LSE

So etwas sollte Ihnen den Namen der Datei geben (der unter Ihrer Zeile hinzugefügt werden soll: Set swModel = swApp.ActiveDoc)

 

Dim sFileName als Zeichenfolge

sFileName =swModel.GetPathName

Debug.print sDateiname

PS: Vergessen Sie nicht, diese Zeile zu löschen: Const sFileName                 As String="test_assemblage. SLDASM"  (oder in einem Kommentar schreiben)

1 „Gefällt mir“

Hallo Denis,

Meine Antwort war nicht verschwunden... Entschuldigung (ich musste nicht "Veröffentlichen" auswählen). Danke, es hat super funktioniert.

Und dann weiß ich nicht, was ich getan habe, weil nichts mehr funktioniert...

NumRow = swBOMAnnotation.RowCount  ergibt 1, während ich mehrere Komponenten habe... Meine Nomenklatur wird überhaupt nicht mehr angezeigt...

Haben Sie eine Idee?

Ich hänge das Makro an Sie an...

Danke für Ihre Hilfe


einfügen-stückliste-asm.swp

Noch eine kleine Klarstellung....

wenn ich meine Stückliste manuell einfüge, indem ich

TemplateName = "C:\Benutzer\sal1chl\Desktop\test_assemblage2.sldbomtbt"
 

Keine Sorge, die Tabelle wird angezeigt (1. Ebene)

wenn ich es über das Makro aufrufe, habe ich nur die 1. Zeile der Tabelle mit den Namen der Spalten....

Ich denke, mein Fehler steckt da drin...

TemplateName = "C:\Benutzer\sal1chl\Desktop\test_assemblage.sldbomtbt"
' Stücklistentyp

Stücklistentyp = swBomType_TopLevelOnly
'Erstellung der Stücklistentabelle

Set swBOMAnnotation = swModelDocExt.InsertBomTable3(Vorlagenname, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True)
Set swBOMFeature = swBOMAnnotation.BomFeature

swModel.ForceRebuild3 Wahr

NumCol so lange dimmen
Dim NumRow so lange
Dimmen Sie so lange
Sun J So Lang

NumCol = swBOMAnnotation.ColumnCount              ' ergibt 5
NumRow = swBOMAnnotation.RowCount                  ' es ergibt 0, daher das Problem....

Hallo

Ich habe meinen Fehler gefunden...

Ich hatte versehentlich die Zeilen SFileName und Configuration vertauscht.

 

sFileName = swModel.GetPathName '= Anzeigename der Assembly mit dem Pfad
Debug.Print sFileName

Konfiguration = swApp.GetActiveConfigurationName(sDateiname)

 

Problem behoben

Vielen Dank an euch beide für eure Hilfe

 

LSE