Exportieren der Stückliste nach Excel mit einem VBA-Makro

Hallo ihr alle.

Ich habe ein VBA-Programm erhalten, um meine Stückliste in ein .xls Blatt zu exportieren

Alles läuft gut, bis auf eine Option, die ich nicht ändern kann.

Ich möchte, dass das Programm die aktuelle Konfiguration auswählt.

Derzeit wird nach der Konfiguration mit dem Namen "Default" gesucht

Konfiguration = "Standard"

Wenn jemand die Antwort kennt:)

 

****************************

Beispiel für Einfügen einer Stücklistentabelle und Extrahieren von Daten (VBA)
In diesem Beispiel wird gezeigt, wie Sie eine Stücklistentabelle einfügen und die Daten daraus extrahieren.

'-------------------------------------------------------
(') Voraussetzungen:
' 1. Vergewissern Sie sich, dass das angegebene Zeichnungsdokument, das geöffnet werden soll,
" existiert.
' 2. Öffnen Sie das Direktfenster.
'
' Postbedingungen:
' 1. Öffnet das angegebene Zeichnungsdokument.
' 2. Wählt eine Zeichnungsansicht aus.
' 3. Fügt eine Stücklistentabelle an der Stelle ein, an der die Zeichnung
" ausgewählt wurde.
' 4. Untersuchen Sie die Zeichnung und das Direktfenster.
'
' HINWEIS: Da die Zeichnung an anderer Stelle verwendet wird,
' Speichern Sie die Änderungen.
'-------------------------------------------------------

Option Explizit

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

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

TemplateName = "M:\DATENBANK\TEMPLATES\05-Modell der Nomenklatur\GP_ASM_Nomenclature BOS.sldbomtbt"
Stücklistentyp = swBomType_Indented
Konfiguration = "Standard"
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

Legen Sie config = swModel.GetActiveConfiguration fest
Legen Sie cusPropMgr = config fest. 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
Pfad = "C:\temp\BOS.xlsx"

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

Ende Sub


insert-bom-asm_-_03.swp

 Hallo dlebrun_1,

Offensichtlich besteht Ihr Code aus zwei großen Blöcken.

Die erste (Zeilen 22 bis 53) erstellt die Nomenklatur für eine gegebene Konfiguration; unter Excel eigentlich. Die zweite (Zeilen 55 bis 100) erhält den Namen des Karikaturisten in der aktiven Konfiguration (macht aber nichts damit, was eigenartig ist).

Der erste Block verwendet im Gegensatz zum zweiten nicht die aktive Konfiguration, sondern die "Default". Dies ist Zeile 49: Konfiguration = "Standard". Es ist dann besser, die Variable "Configuration" zu definieren, die den Namen der Konfiguration enthält, indem Sie das Konfigurationsobjekt aufrufen. Ich schlage dann vor, dass Sie diese Zeile am Beispiel der folgenden Methode ersetzen (Link zur Hilfeseite von Solidworks 2019):

Sub essai_8946585465656()
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Configuration As String
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    Configuration = swApp.GetActiveConfigurationName(swModel.GetPathName)
    MsgBox Configuration
    
End Sub

 

1 „Gefällt mir“

Hallo

"Der zweite (Zeile 55 bis 100) erhält den Namen des Karikaturisten in der aktiven Konfiguration (macht aber nichts damit, was eigenartig ist)": und ja, er ist schön!! Ich erkenne in diesem Code einen Teil eines Makros, das ich nach einer bestimmten Anfrage erstellt habe, das aber offensichtlich aus dem Zusammenhang gerissen und von jemandem überarbeitet wurde, der nicht wirklich verstanden hat, was er tut. Um dem aktuellen Bedarf gerecht zu werden, ist es möglich, eine gute Anzahl von Zeilen zu löschen, und es reicht in der Tat aus, die aktive Konfiguration mit der Funktion "GetActiveConfigurationName" beizubehalten, wie von mgauroy vorgeschlagen.

Herzliche Grüße

1 „Gefällt mir“

Mgauroy 

Danke für Ihre Hilfe. Ich bin deinem Rat gefolgt, jetzt funktioniert alles.

D.Roger

Ich habe dieses Programm aus dem Forum und habe es schnell geändert, ohne es vollständig zu löschen. Leider bin ich nicht besonders gut in VBA, wie ihr bemerkt habt ;) 

Hier ist das Ergebnis nach der Änderung:

Option Explizit

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

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

TemplateName = "M:\DATENBANK\TEMPLATES\05-Modell der Nomenklatur\GP_ASM_Nomenclature BOS.sldbomtbt"
Stücklistentyp = swBomType_Indented
Konfiguration = swApp.GetActiveConfigurationName(swModel.GetPathName)
MsgBox-Konfiguration
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

Pfad als Zeichenfolge dimmen
Pfad = "C:\temp\BOS.xlsx"

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

Ende Sub

1 „Gefällt mir“

Hallo

Ich wäre auch daran interessiert, die Möglichkeiten dieses Makros zu entdecken, aber ich bleibe bei der 1. Zeile hängen: "Typ definiert nicht definiert".

Dieses Makro kann aus SolidWorks und nicht aus Excel 365 gestartet werden.

Vielen Dank für Ihr Feedback, einen schönen Tag


pb_macro.png

Öffnen Sie Ihr Makro mit dem Editor und überprüfen Sie, ob Sie die Microsoft Excel-Referenz im Menü des Referenzen-Tools hinzugefügt haben:

 

Und auch im Allgemeinen ist es besser, ein neues Thema mit dem Link zu eröffnen, als ein altes auszugraben

2 „Gefällt mir“

Vielen Dank, es funktioniert! Ich werde in der Lage sein, zu sehen, was damit in SW oder Excel gemacht werden kann.

Es schien mir, dass meine Frage in der Kontinuität des Themas lag, weshalb ich kein eigenständiges neues Thema eröffnete.

Danke noch einmal

1 „Gefällt mir“

Hallo, ich habe das Makro ausprobiert, aber ich bekomme Fehler.

Wie man dieses Makro in SOLIDWORKS einführt, gibt es Änderungen, die vorgenommen werden müssen,

Danke für Ihre Hilfe

Hallo

Welche Art von Fehlern? Ein Screenshot der Nachrichten wäre nicht schlecht...

Eine definitive Änderung besteht darin, den Pfad der Stücklistenvorlage (TemplateName) zu ändern

Herzliche Grüße

2 „Gefällt mir“

Hallo zusammen, ich komme 2/3 Jahre später, ich weiß :grin:
Ich bin fast in der gleichen Situation, also haben mir diese Fragen und Antworten gute Dienste geleistet!

Eine kleine Besonderheit meines Problems ist, dass ich auch viele benutzerdefinierte Eigenschaften wie den Namen des Ingenieurs, die Teilenummer oder die Plannummer exportieren muss...
Wenn ich es richtig verstanden habe, hängt es von der aufgerufenen Vorlage ab, also wie ändert man eine solche Vorlage? Oder gibt es einen anderen Weg, es zu tun?

Vielen Dank im Voraus

Das VBA-Programm ruft eine SolidWorks Stücklistenvorlagendatei auf. Passen Sie diese Vorlage mit den Informationen an, die Sie hinzufügen möchten.

2 „Gefällt mir“

Es funktioniert danke, aber das Problem ist, dass ich nicht weiß, wie ich eine solche Datei (.sldbomtbt) ändern soll. Wüsstest du, wie es geht?

Hallo
Bearbeiten Sie einfach eine Tabelle, indem Sie die gewünschten Spalten hinzufügen, klicken Sie dann auf das angezeigte Kreuz, um die Tabelle zu verschieben, und wählen Sie dann Speichern unter aus.
Standardmäßig wird sie als Stücklistenvorlage gespeichert.

2 „Gefällt mir“

Vielen Dank, alles funktioniert so, wie ich es wollte!

Hallo

In Bezug auf Ihre Hauptanforderung, Ihre Stücklisten nach Excel zu exportieren, haben wir ein in SOLIDWORKS integriertes Tool entwickelt, mit dem Sie eine Stückliste aus einer Baugruppe oder einem Ordner erstellen und die Eigenschaften als Extraktionsfilter verwenden, die Extraktionsebene der Unterbaugruppen auswählen und mehrere Eigenschaften in einer Spalte verketten können.

Es ist auch möglich, den Export in den Formaten Text, Excel, SOLIDWORKS Tabelle, PDF oder XML anzupassen.

Dieses Tool ist SmartBom: SmartBom

Herzliche Grüße

Hallo

Ich habe dieses Makro ausprobiert, um zu sehen.

Das Makro funktioniert, wenn ich es aus einer Baugruppe, aber nicht aus einer Zeichnung starte.
Dies kann seine normale Funktion sein.

Es wäre möglich, eine Variante davon zu haben, um die Stückliste abzurufen, die sich in einer Zeichnung befindet (ich füge Daten in einer Spalte meiner Stückliste hinzu und es ist praktischer auf dem MEP als in der Baugruppe)??

Wäre es auch möglich, die Excel-Datei aus einer vorhandenen Vorlage zu erstellen und unter einem anderen Namen zu speichern? (um andere bereits vorhandene Blätter in Excel zu haben und möglicherweise auch andere Makros dort abzulegen)

Vielen Dank im Voraus

Hallo
Ich denke, alles ist machbar, man muss nur SW- und Excel-Code kompilieren.
Ich glaube, ich habe diese Art von Frage bereits zu einem anderen Thema beantwortet, da müsste ich etwas recherchieren.