Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Einzelne Werte mit einem Makro für Skizzen aus einer Exceltabbele auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
On-Demand-Webinare zu SolidCAM (SolidCAM)
Autor Thema:  Einzelne Werte mit einem Makro für Skizzen aus einer Exceltabbele auslesen (1263 / mal gelesen)
JWBM
Mitglied


Sehen Sie sich das Profil von JWBM an!   Senden Sie eine Private Message an JWBM  Schreiben Sie einen Gästebucheintrag für JWBM

Beiträge: 3
Registriert: 13.11.2017

Win10 64-bit

erstellt am: 14. Nov. 2017 12:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 3189
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JWBM 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von JWBM an!   Senden Sie eine Private Message an JWBM  Schreiben Sie einen Gästebucheintrag für JWBM

Beiträge: 3
Registriert: 13.11.2017

Win10 64-bit

erstellt am: 14. Nov. 2017 13:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von bk.sc an!   Senden Sie eine Private Message an bk.sc  Schreiben Sie einen Gästebucheintrag für bk.sc

Beiträge: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 14. Nov. 2017 13:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JWBM 10 Unities + Antwort hilfreich

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 Explicit

Dim 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)


Sehen Sie sich das Profil von Christian_W an!   Senden Sie eine Private Message an Christian_W  Schreiben Sie einen Gästebucheintrag für Christian_W

Beiträge: 3189
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JWBM 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von JWBM an!   Senden Sie eine Private Message an JWBM  Schreiben Sie einen Gästebucheintrag für JWBM

Beiträge: 3
Registriert: 13.11.2017

Win10 64-bit

erstellt am: 14. Nov. 2017 15:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich denke ihr habt Recht, habe die Koordinaten aus einer einfachen .txt datei geholt und voila es hat wesentlich einfacher geklappt.

ich Danke euch für eure Hilfe!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

nahe
Ehrenmitglied



Sehen Sie sich das Profil von nahe an!   Senden Sie eine Private Message an nahe  Schreiben Sie einen Gästebucheintrag für nahe

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: 17. Nov. 2017 07:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für JWBM 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz