| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS | | | | Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen, eine Veranstaltung am 21.11.2024
|
Autor
|
Thema: Einzelne Werte mit einem Makro für Skizzen aus einer Exceltabbele auslesen (1311 / mal gelesen)
|
JWBM Mitglied
Beiträge: 3 Registriert: 13.11.2017 Win10 64-bit
|
erstellt am: 14. Nov. 2017 12:07 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich versuche eine Welle über ein Makro zu generieren, dabei soll eine skizze mit punkten aus einer Exceltabelle erzeugt werden. Leider gelingt mir das einlesen der Werte auf teufel komm raus nicht Bekomme folgende Fehlermeldung: Laufzeitfehler '424' Objekt erforderlich. Ich benutze Solidworks 2017 und Excel 2010 Und ja, wie ihr am Code seht bin ich noch blutiger Anfänger, später soll das Makro mit einer For- Schleife die Excel tabelle durchgehen und so beliebig viele Wellenabsätze zeichnen. hier der Code: Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks ' New Document Dim swSheetWidth As Double swSheetWidth = 0 Dim swSheetHeight As Double swSheetHeight = 0 Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2017\templates\Teil.prtdot", 0, swSheetWidth, swSheetHeight) Dim swPart As PartDoc Set swPart = Part swApp.ActivateDoc2 "Teil13", False, longstatus Set Part = swApp.ActiveDoc Dim myModelView As Object Set myModelView = Part.ActiveView boolstatus = Part.Extension.SelectByID2("Ebene vorne", "PLANE", 0, 0, 0, False, 0, Nothing, 0) Part.SketchManager.InsertSketch True
Dim oExcelApp As Object Set oExcelApp = CreateObject("Excel.Application") Dim xe Dim ye Dim ze Dim xa Dim ya Dim za xe = 0 ye = 0 ze = 0 xa = 0 ya = Excel.Range("A2").Select za = 0 Dim skSegment As Object Set skSegment = Part.SketchManager.CreateLine(xe, ye, ze, xa, ya, za)
boolstatus = Part.Extension.SketchBoxSelect("-0.005689", "0.033915", "0.000000", "0.009289", "0.001819", "0.000000") boolstatus = Part.Extension.SelectByID2("Line1", "SKETCHSEGMENT", 8.79971622997355E-05, 2.08624876114965E-02, 0, False, 0, Nothing, 0) Part.SketchManager.InsertSketch True End Sub Als quelle dient eine geöffnete Exceltabelle, oder muss ich doch einen konkreten Pfad angeben?
Vielen Dank schonmal, Gruß JWBM Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 14. Nov. 2017 12:39 <-- editieren / zitieren --> Unities abgeben: Nur für JWBM
Hallo, dann sortier mal, was der macrorecorder so aufgezeichnet hat. da gibt es ein Part und noch ein swPart dann gibt es ein oExcelApp Objekt, aber keine Excel-Datei Excel.range.select liefert auch keinen WErt zurück. ich würde eher excelmappe.cells(i,j).value probieren. das lässt sich dann mit i,j auch leicht durchlaufen. Gruß, Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JWBM Mitglied
Beiträge: 3 Registriert: 13.11.2017 Win10 64-bit
|
erstellt am: 14. Nov. 2017 13:34 <-- editieren / zitieren --> Unities abgeben:
Okay, habe den Code nun einmal "ausgemistet" nun sieht der so aus: Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Sub main() Set swApp = Application.SldWorks Set Part = swApp.NewDocument("C:\ProgramData\SolidWorks\SOLIDWORKS 2017\templates\Teil.prtdot", 0, swSheetWidth, swSheetHeight) Dim swPart As PartDoc Set swPart = Part Set Part = swApp.ActiveDoc Part.SketchManager.InsertSketch True 'Einlesen aus Excel Dim xe Dim ye Dim ze Dim xa Dim ya Dim za xe = 0 ye = 0 ze = 0 xa = 0 ya = 2 za = 0 Dim skSegment As Object Set skSegment = Part.SketchManager.CreateLine(xe, ye, ze, xa, ya, za)
Part.SketchManager.InsertSketch True End Sub
nun wollte ich mit:
Dim oExcelApp As Object Set oExcelApp = CreateObject("Excel.Application") ein Objekt erstellen, allerdings weiß ich nun nicht, wie ich die datei angebe? kannst du mir da helfen?
Danke für deine Antwort
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bk.sc Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2795 Registriert: 18.07.2012 -Solid Works 2019 SP5 -Pro Engineer WF 3
|
erstellt am: 14. Nov. 2017 13:54 <-- editieren / zitieren --> Unities abgeben: Nur für JWBM
Hallo, hast du mal überlegt das ganze aus Excel zu starten an Stelle aus SWX heraus? Weil aus SWX heraus müsstest du SWX die Excel-Datei / Arbeitsmappe sinnvollerweise mitgeben also muss diese irgendwo abgespeichert sein. Hier noch ein Snipsel wie man an Excel rankommt. Code: Option ExplicitDim xlsApp As Object 'Excel Dim xlsWorkbook As Object Dim xlsWorksheet As Object Dim val1 As String Dim val2 As String Dim val3 As String Dim val4 As String Dim val5 As String Dim boolstatus As Boolean Dim lErrors As Long, lWarnings As Long Sub main() Set xlsApp = GetObject(, "Excel.Application") 'aktive Excel-Sitzung holen Set xlsWorkbook = xlsApp.Workbooks("Name_Tabelle.xls") 'Pfad zur Excel-Datei Set xlsWorksheet = xlsWorkbook.Worksheets("Name_Mappe") 'Welche Mappe wird benötigt val1 = xlsWorksheet.range("A1").Value val2 = xlsWorksheet.range("A2").Value val3 = xlsWorksheet.range("A3").Value val4 = xlsWorksheet.range("A4").Value val5 = xlsWorksheet.range("A5").Value Set xlsApp = Nothing Set xlsWorkbook = Nothing Set xlsWorksheet = Nothing
Gruß Bernd
------------------ --- Man muß nicht alles wissen, man muß nur wissen wo es steht --- Staatlich anerkannte Deutschniete [Diese Nachricht wurde von bk.sc am 14. Nov. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian_W Ehrenmitglied V.I.P. h.c. Konstrukteur (Dipl-Ing)
Beiträge: 3256 Registriert: 04.04.2001 CSWP 12/2015<P>SWX2021sp5 Win10/11 (SWX2016, SWX2012) proAlpha6.2e00/calinkV9 (Tactonworks) (Medusa7, NesCAD2010, solidEdge19)
|
erstellt am: 14. Nov. 2017 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für JWBM
Zitat: ... Okay, habe den Code nun einmal "ausgemistet"...
Ich fürchte, jetzt hast du auch was rausgeschmissen, was gebraucht wird ... 2D Skizze einfügen ist leichter, wenn vorher einen Ebene gewählt ist, oder? hast du mal http://solidworks.cad.de/mm_24.htm angesehen? da werden die Punkte aus einer Textdatei ermittelt und in eine 3D Skizze gelegt. evtl ist da für dich etwas verwendbar. Gruß, Christian
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
JWBM Mitglied
Beiträge: 3 Registriert: 13.11.2017 Win10 64-bit
|
erstellt am: 14. Nov. 2017 15:50 <-- editieren / zitieren --> Unities abgeben:
|
nahe Ehrenmitglied
Beiträge: 1764 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: 17. Nov. 2017 07:42 <-- editieren / zitieren --> Unities abgeben: Nur für JWBM
Hallo JWBM, Daten aus Excel lesen ist keine Hexerei, Bernd hat es ja schon gezeigt nur zur Info, ich mach das mit dem Zugriff auf Excel immer wie im Code unten zur Erklärung CreateObject erstellt immer eine neu Instanz von Excel, solltest Du m.M. also nicht verwenden, um auf eine bereits geöffnete Datei zuzugreifen d.h. 1.) Du solltest immer mit GetObject prüfen ob Excel bereits läuft 2.) wenn Du mit CreatObject was erstellst, solltest Du es auch immer schließen, wenn Du das Objekt nicht mehr benötigst (sonst müllst Du Dir den Hauptspeicher zu, ich sprech da aus Erfahrung ) 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 ------------------ Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|