| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SolidCAM im Einsatz bei der August Weckermann KG |
Autor
|
Thema: VBA Makro Stückliste via Excel exportieren (5630 mal gelesen)
|
Franky500 Mitglied
Beiträge: 5 Registriert: 11.12.2012
|
erstellt am: 11. Dez. 2012 08:49 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, ich habe ein Problem meine Stückliste via Excel zu exportieren. Das Makro soll folgende Aufgaben beherrschen: 1. Stücklisteninformationen in eine Excel Tabelle schreiben. 2. Diese Excel extern als .prn (Leerzeichen getrennt) speichern, schön wäre es wenn das Makro die Dateien durch nummeriert z.B. Stückliste1, Stückliste 2 usw. 3. Die Dateiendung .prn entfernt. 4. Eine Batch-Datei vom Server startet. Mit VBA für Solidworks kenn ich mich einigermaßen aus hab jetzt das Problem wie ich Excel ansprechen kann. Ich habe mein Makro soweit fertig nur bei Punkt zwei beiß ich mir im Moment noch die Zähne aus hat von euch vielleicht einer eine Idee? Vielen Dank Gruß Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten Heß Mitglied Diplom Ingenieur (Konstruktion)
Beiträge: 105 Registriert: 23.07.2004 Windows 7 64bit, 12270MB RAM, 3,2 P3 Xeon, Quadro 4000 SW 2014 64bit /SP4.0 MaxxDB SP3.04
|
erstellt am: 11. Dez. 2012 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Hi Frank, nur mal so aus neugier. Warum willst du unbedingt excel ansprechen, wenn du die datei anschließend als Excelfremdes Format ablegen willst? Warum nciht gleich die Stückliste als .prn speichern? Gruß Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franky500 Mitglied
Beiträge: 5 Registriert: 11.12.2012
|
erstellt am: 11. Dez. 2012 10:01 <-- editieren / zitieren --> Unities abgeben:
Ich gehe den Umweg über Excel weil die Datei eine bestimmte Formatierung (an Position X steht Information Y usw.) aufweisen muss um diese Anschließend weiter zu verarbeiten, die Formatierung lässt sich mit Excel schnell und einfach erstellen. Gruß Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 11. Dez. 2012 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Hallo Frank dann brauchst Du zwei Makros, wenn ich Dich richtig verstanden habe, weil Du ja scheinbar in Excel noch bestimmte Formatierungen vornimmst. Dann wär es ja einfacher machst ein Excel Makro für die Schritte 2 bis 4. Meiner Meinung nach, wär es schon eine Überlegung, wie Carsten geschriebn hat das Ganze gleich im SWX Makro zu erledigen. Falls das autom. zu machen ist. Du kannst aber auch gleich alles über das Excel Makro erledigen.
------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franky500 Mitglied
Beiträge: 5 Registriert: 11.12.2012
|
erstellt am: 11. Dez. 2012 11:09 <-- editieren / zitieren --> Unities abgeben:
Hallo nahe, Die Formatierung ist schon durch die Excel-Vorlage in die die Informationen geschrieben werden festgelegt. Ich bekomm die Excel einfach nicht gespeichert auch nicht als .xls oder xlsx. Mein Problem liegt darin Excel "anzusprechen". Der Rest des Makros Punkte 1. , 3. und 4. sind soweit fertig und auch lauffähig. Gruß Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten Heß Mitglied Diplom Ingenieur (Konstruktion)
Beiträge: 105 Registriert: 23.07.2004 Windows 7 64bit, 12270MB RAM, 3,2 P3 Xeon, Quadro 4000 SW 2014 64bit /SP4.0 MaxxDB SP3.04
|
erstellt am: 11. Dez. 2012 14:13 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Hi Frank, ich habe mal meine Programme durchgesehen. dabei bin ich auf folgende befehle gestoßen. Vielleicht hilft Dir dies weiter: Dim objxl As object objxl = CreateObject("excel.Application") excelfile = "c:\test.xls" objxl.Workbooks.Open(excelfile) objxl.Visible = True objxl.Worksheets(1).Activate() objxl.Worksheets(1).Cells(10, 1).Value = "Hallo" xlbook = objxl.ActiveWorkbook pfade = "C:\test.prn" xlbook.SaveAs(pfade) objxl.quit() Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franky500 Mitglied
Beiträge: 5 Registriert: 11.12.2012
|
erstellt am: 13. Dez. 2012 09:56 <-- editieren / zitieren --> Unities abgeben:
Danke Carsten, aber ich steh trotzdem noch auf dem Schlauch Hab hier mal mein Makro, vielleicht kannst du mir damit jemand weiter helfen. Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swSelMgr As SldWorks.SelectionMgr Dim swView As SldWorks.View Dim swBOMTable As SldWorks.BomTableAnnotation Dim swTable As SldWorks.TableAnnotation Dim swAnn As SldWorks.Annotation Dim nNumCol As Long Dim nNumRow As Long Dim sRowStr As String Dim i As Long Dim j As Long Set swApp = Application.SldWorks swApp.Visible = True Set swModel = swApp.ActiveDoc If swModel Is Nothing Then Call MsgBox("keine Datei geöffnet", vbOKOnly, "Information") Exit Sub End If Dim ArtikelNr As String ArtikelNr = swModel.CustomInfo("Artikel-Nr.") Dim Excelpfad As String Dim ExcelAppId As VbCallType Dim ExcelSheet As Object Dim wbook As Object Rem Pfad anpassen für Speicherort Excel-Programm Excelpfad = "C:\Program Files (x86)\Microsoft Office\Office14\Excel.EXE C:\Users\f.wolters\Desktop\Makro\Sicherung\proin_vorlage.XLSX" ExcelAppId = Shell(Excelpfad, 1) Rem Pfad anpassen für Speicherort Vorlagendatei Excel-Stücklistenvordruck Set ExcelSheet = GetObject("C:\Users\f.wolters\Desktop\Makro\Sicherung\proin.XLSX") Rem Baugruppen ArtikelNr in Excel schreiben ExcelSheet.Application.Cells(1, 4).Value = ArtikelNr Set swSelMgr = swModel.SelectionManager Set swBOMTable = swSelMgr.GetSelectedObject5(1) Set swTable = swBOMTable Set swAnn = swTable.GetAnnotation nNumCol = swTable.ColumnCount nNumRow = swTable.RowCount Rem Stückliste nach Excel For i = 1 To nNumRow - 1 Rem Artikelnummer Rohmaterial ExcelSheet.Application.Cells(i, 9).Value = swTable.Text(i + 1, j + 1) Rem Menge ExcelSheet.Application.Cells(i, 11).Value = swTable.Text(i + 1, j + 2) Rem Länge ExcelSheet.Application.Cells(i, 15).Value = swTable.Text(i + 1, j + 3) Next i Rem Excel speichern Rem Dateiendung entfernen Call rename End Sub Sub rename() Dim retVal retVal = Shell("C:\Users\f.wolters\Desktop\Makro\rename.bat", 1) End Sub Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 13. Dez. 2012 13:45 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Hallo Franky500 Was funktioniert nicht? ich versteh nicht ganz warum Du das Öffnen von Excel, meiner Meinung nach, so kompliziert machst. Ich mach das bei meinen Makro so das hat den Vorteil, dass es egal ist wo Excel gespeichert ist On Error Resume Next ' Versuch einen Verweis auf Excel zu bekommen Set excel = GetObject(, "Excel.Application") ' Wenn ein Fehler auftritt dann läuft Excel noch nicht If Err.Number <> 0 Then excel_NOK = True Err.Clear ' Wenn Excel noch nicht läuft, dann wird es gestartet If excel_NOK = True Then Set excel = CreateObject("excel.application") End If excel.Visible = True eine Excel-Datei öffnen ich dann mit excel.workbooks.open "Dateiname" "swModel.CustomInfo" würde ich auch nicht mehr verwenden, weil lt. Online-Hilfe durch "CustomPropertyManager Property (IModelDocExtension)" ersetzt wurde und bei neuen Makro, würde ich nur mehr die empfohlenen Methoden verwenden. noch eine Frage: für was benötigst Du die BAT-Datei rename? Dateien umbenennen funktioniert auch von VBA aus mit der Funktion "name" ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Franky500 Mitglied
Beiträge: 5 Registriert: 11.12.2012
|
erstellt am: 13. Dez. 2012 14:01 <-- editieren / zitieren --> Unities abgeben:
Hallo Heinz danke für deine Tipps, werde das "Name" und den Start Vorgang von Excel einbauen, die bat Lösung war nur für den Anfang, Mein Problem besteht darin die erzeugte Excel gespeichert zu bekommen. Gruß Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
riesi Mitglied CAD-Admin
Beiträge: 1073 Registriert: 06.05.2002 SWX Premium 2020-Sp5
|
erstellt am: 13. Dez. 2012 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Mal'ne ganz andere Frage: Wäre es nicht einfacher, direkt vom Client per VBA die Stückliste aus zu lesen? Wir steuern von unserem ERP-Client direkt SolidWorks an und holen aus SolidWorks die benötigten Information, bzw. schreiben zurück nach SolidWorks. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Konstrukteur (m/w/d) | Kurtz Ersa ist ein Maschinenbauer für die produzierende Industrie in Familienbesitz mit fast 250-jähriger Tradition. Daher fühlen wir uns verpflichtet, unsere Strategie mit 1.500 Mitarbeitern auf ein langfristiges, gesundes und nachhaltiges Wachstum auszurichten. In unseren drei Geschäftsfeldern Electronics Production Equipment, Automation und Moulding Machines werden Maschinen, Anlagen und Werkzeuge gefertigt.... | Anzeige ansehen | Konstruktion, Visualisierung |
|
nahe Ehrenmitglied
Beiträge: 1747 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 13. Dez. 2012 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für Franky500
Hallo Franky meines Wissens geht speichern über das "Workbook" Objekt Wenn Du Excel wie von mir oben beschrieben öffnest sollte das mit "excel.activeworkbook.saveas" funktionieren Die Paramter dafür schaust Du Dir am besten in der VBA Umgebung von Excel an. ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |