Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  mit SldWorks Makro auf ein bestimmtes Excel-Tabellenblatt zugreifen

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
  
Innovationstag mit SolidCAM und Plogmann bei HEDELIUS in Meppen
Autor Thema:  mit SldWorks Makro auf ein bestimmtes Excel-Tabellenblatt zugreifen (2511 / mal gelesen)
Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 24. Aug. 2017 09:51    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,

ich habe bereits ewig gesucht und vielleicht suche ich auch einfach mit den falschen Begriffen... Nun hoffe ich, dass ihr mir helfen könnt.
Von VBA-Programmierung in Excel habe ich recht gute Kenntnisse, allerdings scheint das in SolidWorks doch sehr anders zu sein...
Und da steckt auch schon mein Problem.

Aufgabe: Werte aus einer geöffneten Tabelle (hier: Behälterkonfigurator_Test.xlsm), aber einem nicht aktiven Tabellenblatt (hier: Konfi) auslesen und als Maß hinterlegen.

ich habe es geschafft, das aktuelle Tabellenblatt zu verwenden, jedoch fehlt mir der Sprung zu einem nicht aktiven Tabellenblatt.

Nachfolgend der Code:

Dim swApp, Part As Object
Dim Part1, Part2, Part3, Part4 As SldWorks.ModelDoc2
Dim myDimension, myD1, myD2, myD3, myD4 As Object
Dim objSource As Object
Dim xl As Excel.Application
Dim Errors As Long
Dim Warnings As Long
Dim Name1, Name2 As String

Sub main()

Set swApp = CreateObject("SldWorks.Application")
'Set Part1 = swApp.ActiveDoc


Set Part1 = swApp.OpenDoc6("X:\Technikerarbeit\3D_Teile\Muffe.SLDPRT", swDocPART, swOpenDocOptions_Silent, "", Errors, Warnings)
'objSource = Tabelle, aus der die Daten geholt werden sollen.
Set xl = CreateObject("Excel.Application")
Set objSource = xl.Workbooks("Behälterkonfigurator_Test.xlsm").Worksheets("Konfi")  'hier entsteht der Fehler
Set swApp = Application.SldWorks

...

Plan B wäre ein 2-dimensionales Array zu erstellen, allerdings verstehe ich dazu die Syntax nicht...

Vielleicht hat ja jemand eine Idee.
Vielen Dank im Voraus.

Gruß,
Kristina

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 24. Aug. 2017 10:31    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 Thunja 10 Unities + Antwort hilfreich

Hallo Kristina,
und herzlich Willkommen hier im Forum. 

Ich kopiere mal einen Auszug aus meinem Makro.
Evtl. hilft dir das weiter.


Code:
'öffne mit Excel eine bestehende Tabelle und aktiviere ein Blatt
    Dim xlApp          As New Excel.Application
    Dim xlWb            As Excel.Workbook
    Dim xlWs            As Excel.Worksheet

    Set xlApp = Excel.Application                      'Excel öffnen
    xlApp.Visible = True                                'Excel einblenden
    Set xlWb = xlApp.Workbooks.Open(sPath)              'Tabelle öffnen
    Set xlWs = xlWb.Worksheets("Tabelle1")              'Blatt ansprechen



Grüße und viel Erfolg, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 24. Aug. 2017 10: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

Hallo Andi,

vielen Dank für deine schnelle Antwort.

Ich habe grad deine Version komplett übernommen, jedoch erhalte ich dann die Fehlermeldung

"Index außerhalb des gültigen Bereichs"

bereits in der Zeile, wo das Workbook geöffnet werden soll.

Dann habe ich gedacht, vielleicht findet er die Datei nicht und habe statt nur die Datei anzugeben auch den kompletten Pfad mit angegeben. Auch das möchte er nicht.

Darüber hinaus ist meine Tabelle auf jeden Fall schon geöffnet, wenn das Makro in SW startet.

Gruß,

Kristina

[Diese Nachricht wurde von Thunja am 24. Aug. 2017 editiert.]

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 24. Aug. 2017 11:03    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 Thunja 10 Unities + Antwort hilfreich

Hallo,

evtl. hilft das.
Den Pfad musst du natürlich anpassen.

Code:
Dim sPath          As String

sPath = "C:\Arbeitsverzeichnis\Behälterkonfigurator_Test.xlsm"


Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 24. Aug. 2017 11:12    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 Andi,

den Pfad hatte ich als String direkt reingelegt. Leider hat das nicht funktioniert.
Allerdings habe ich das .Open vergessen...
Dann funktioniert dein Quellcode natürlich einwandfrei.

Ich bin am Überlegen, ob der Nutzer des Makros eventuell einfach zuvor die entsprechende Excel-Mappe schließen soll. Denn dann hättest du mein Problem gelöst. javascript:InsertSMI(' %20');

Allerdings wäre es eigentlich besser, wenn sie aufbleiben könnte, da die  SW-Anwendung mit der Excel-Anwendung zusammen ein Projekt bildet.

Trotz allem vielen Dank für deine Hilfe!!

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 24. Aug. 2017 11:25    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 Thunja 10 Unities + Antwort hilfreich

Hallo,
ich habe jetzt grade keinen Code parat, der sich an ein offenes Excel anklingt.
Allerdings müsstest du ja auch sicher sein, dass auch das richtige Excelsheet geöffnet ist, falls da noch ein anderes zufällig offen ist.
Also sowas wie Active-xxx reicht sicherlich nicht.

Aber evtl. reicht dir einfach, vorher Excel oder die Tabelle zu schließen und es erneut zu öffnen.

Code:
Excel.Workbooks.Close                          'nur Tabelle schließen
Excel.Application.Quit                        'Excel schließen

Vielleicht kommt hier noch jemand und hat den passenden Code parat.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 24. Aug. 2017 11:29    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

Danke trotzdem.

Du hast mich auf jeden Fall schon mal weitergebracht, als ich in den letzten 2 Tagen gekommen bin.

Und ja, ich warte mal ab.

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 24. Aug. 2017 14:28    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

Also im Nachhinein habe ich es nun funktionsfähig geschrieben, sodass auch das Excel-Dokument geöffnet bleiben kann. javascript:InsertSMI(' ');

Der Codeschnipsel lautet dann so:

Dim swApp, Part As Object
Dim Part1 As ModelDoc2
Dim Part2 As ModelDoc2
Dim Part3 As ModelDoc2
Dim Part4 As ModelDoc2
Dim myDimension, myD1, myD2, myD3, myD4 As Object
Dim objSource As Object
Dim xl As Object
Dim Errors As Long
Dim Warnings As Long
Dim Name1, Name2 As String

Sub main()

Set swApp = CreateObject("SldWorks.Application")
'Set Part1 = swApp.ActiveDoc

Set Part1 = swApp.OpenDoc6("X:\Technikerarbeit\3D_Teile\Muffe.SLDPRT", swDocPART, swOpenDocOptions_Silent, "", Errors, Warnings)
Set swApp = Application.SldWorks

'Verbindung zum Excel-Dokument
Set xl = GetObject("X:\Technikerarbeit\Testdateien\Behälterkonfigurator_Test.xlsm")
'Auswahl des Tabellenblatts
Set objSource = xl.worksheets("Konfi")

Set myDimension = Part1.Parameter("D1@Skizze1")
'bei Eingabe 20 (mm) in Excel wird SolidWorks es als 20.000 mm verarbeiten, da die API-Funktionen auf m ausgelegt sind.
'Siehe API-Hilfeseiten (Change dimensions)
myDimension.Value = objSource.Cells(2, 2)
'swApp.SendMsgToUser (objSource.cells(2, 2))
Part1.ClearSelection2 True

Vielen Dank nochmals an Andi, du hast mich weitergebracht.

LG, Kristina

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2572
Registriert: 02.10.2006

Firma: SW 2023-4.0 + PDM Prof.
Windows 10 Pro 64bit, i9-11900
32 GbRAM, Quadro P2200
Home:
SW 2022-5.0
Passungstabelle von Heinz
Windows 11 Pro 64bit,
i7-12700K, 32 GbRAM,
GeForce GTX 1050Ti
Samsung C34H892, 3440x1440 Pixel

erstellt am: 25. Aug. 2017 11:33    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 Thunja 10 Unities + Antwort hilfreich

Hallo Kristina,
freut mich für dich, dass du es so schnell lösen konntest.
Ich hatte gestern keine Zeit mehr, nach dem richtigen Befehl zu suchen.

Deinen Code würde ich nur noch etwas korrigieren wollen.
Achte auf Set swApp, 1x reicht.
Um auch Intellisense verwenden zu können, deklariere ich meine Variablen nicht mit Object.

Beispiel:

Code:
Option Explicit

Dim swApp           As SldWorks.SldWorks
Dim Part            As SldWorks.ModelDoc2
Dim Part1           As SldWorks.ModelDoc2  'SldWorks.PartDoc
Dim Part2           As SldWorks.ModelDoc2
Dim Part3           As SldWorks.ModelDoc2
Dim Part4           As SldWorks.ModelDoc2
Dim myDimension, myD1, myD2, myD3, myD4 As SldWorks.Dimension
Dim objSource       As Excel.Worksheet
Dim xl              As Excel.Workbook
Dim Errors          As Long
Dim Warnings        As Long
Dim Name1, Name2    As String

Sub main()

    Set swApp = Application.SldWorks
    Set Part1 = swApp.OpenDoc6("X:\Technikerarbeit\3D_Teile\Muffe.SLDPRT", swDocPART, swOpenDocOptions_Silent, "", Errors, Warnings)
   
    'Verbindung zum Excel-Dokument
    Set xl = GetObject("X:\Technikerarbeit\Testdateien\Behälterkonfigurator_Test.xlsm")
    'Auswahl des Tabellenblatts
    Set objSource = xl.Worksheets("Konfi")
   
    Set myDimension = Part1.Parameter("D1@Skizze1")
    'bei Eingabe 20 (mm) in Excel wird SolidWorks es als 20.000 mm verarbeiten, da die API-Funktionen auf m ausgelegt sind.
    'Siehe API-Hilfeseiten (Change dimensions)
    myDimension.Value = objSource.Cells(2, 2)
    'swApp.SendMsgToUser (objSource.cells(2, 2))
    Part1.ClearSelection2 True


zum Thema Intellisense kannst du mal hier reinschauen.

http://www.online-excel.de/excel/singsel_vba.php?f=4

Viel Spaß noch und bis bald, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

[Diese Nachricht wurde von Andi Beck am 25. Aug. 2017 editiert.]

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

SW 2017 / Excel 2010

erstellt am: 25. Aug. 2017 11:46    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

Die swapp-Zeile ist mir auch aufgefallen.  

Und gut, dass du es sagst. das Option explicit habe ich vollkommen vergessen, da ich bei Excel das zuvor irgendwann einmal eingestellt habe.

Danke!

P.S.: Der Link wurde gelesen und dein Vorschlag umgesetzt! 

[Diese Nachricht wurde von Thunja am 25. Aug. 2017 editiert.]

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