Extraktion aus Excel

Hallo
Aus solidworks starte ich ein Makro mit einer USF, das beim Öffnen Werte aus einer Excel-Arbeitsmappe anzeigen soll

Dieser Code funktioniert in Excel
ruft Zelle H2 aus dem Reiter ' Liste ' ab

sub Excel_test()
Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
Cells(1, 10) = ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée

end sub

seit Solidworks habe ich diesen Fehler
Laufzeitfehler ‹ 1004 ›:
 Die ' Range ' Methode des Objekts ' _Global ' fehlgeschlagen

Private Sub UserForm_Initialize()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée
end sub

Wenn jemand eine Idee hat

Bonjour;
Ne manquerait-il pas les déclaration/references pour Excel ?

`Dim xlApp As Excel.Application
Set xlApp = New Excel.Application`

Voir (pour plus d'informations):

3 „Gefällt mir“

Ich habe hinzugefügt

Dim xlApp als Excel.Application
Legen Sie xlApp = Neue Excel.Anwendung fest.

Es funktioniert auch nicht

Hallo

Wenn ich mich nicht irre, ist es in VBA nicht möglich, auf den Inhalt einer Excel-Datei zuzugreifen, ohne sie zu öffnen.
Wenn es sich um eine Art " Datenbank " handelt, um beispielsweise eine Dropdown-Liste zu füttern, ist es am einfachsten, sie in eine Textdatei zu schreiben und zu lesen.

1 „Gefällt mir“

Ich habe gerade getestet, dass es in Excel möglich ist, ich kann die Übereinstimmung mit Solidworks nicht finden

sub Excel_test()
Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
Cells(1, 10) = ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée

end sub

et en remplaçant

Cells(1, 10) = ExecuteExcel4Macro(.....

Par

Set xlapp = CreateObject("Excel.application")
Label13 = xlapp.ExecuteExcel4Macro(.....

des pistes relativement identiques ici:

1 „Gefällt mir“

Ich habe gerade getestet, also funktioniert es in Excel, aber nicht in SW (Fehler in der Bereichszeile).
Auf den ersten Blick denke ich, dass es ein Kompatibilitätsproblem zwischen SW ist, das in 64 Bit ist, und Office in 32 Bit.

Essayez avec
GetObject("Excel.Anwendung")
à la place de
CreateObject("Excel.Application")
… Il faut aussi penser à « tuer » tous les processus Excel Residuels:
Shell "TASKKILL /F /IM Excel.exe", vbHide
A voir aussi:

Mais aussi:
https://forum.mycad.visiativ.com/t/lire-un-excel-ferme-depuis-solidworks-en-vba-sw-2016/101788/7?locale=fr&lang=fr

Es ist nicht so sehr die ExecuteExcel4Macro-Zeile, die abstürzt, sondern der Aufruf von Range.

Die Fehlermeldung lautet wie folgt, wie zitiert
Die 'Range'-Methode des Objekts '_Global' ist fehlgeschlagen

Hallo

Die Range-Methode wird von der in die SW integrierten Version von vba nicht unterstützt, daher gibt es noch zwei Lösungen (die zweite wurde zu diesem Zeitpunkt noch nicht getestet):

  1. Erstellen Sie eine Schleife mit einer Funktion zum Abrufen jeder gewünschten Spalte/Zeile, siehe ExecuteExcel4Macro - Microsoft Community

  2. Probieren Sie ADODB-ähnliche Funktionen aus. Verbindung, siehe Lesen und Schreiben in geschlossenen Excel-Arbeitsmappen (developpez.com)

Also habe ich nur den ersten getestet, der einwandfrei funktioniert.

2 „Gefällt mir“

Können Sie das entsprechende Makro einfügen, ich kann es nicht mit Lösung 1 tun

Können Sie mir einfach sagen, in welchem Bereich Sie die Werte abrufen möchten? (z.B. Typ A1:C2)

Hier ist mein ursprünglicher Code, der nicht funktioniert, H2

Private Sub UserForm_Initialize()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks

Url = "C:\Users\xx\Documents\SYSTEL\02-PROG\Macros\"
Fichier_Excel = "PART_Step.xlsm"
label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & Range("H2").Address(, , xlR1C1)) 'URL entrée
end sub

Um es vollständig zu verstehen, möchten Sie nur die H2-Zelle?

Ja

In diesem Fall viel einfacher:

label3= ExecuteExcel4Macro("'" & Url & "[" & Fichier_Excel & "]Liste'!" & "R2C8") 'URL entrée
1 „Gefällt mir“

Großartig, es funktioniert

Hier ist ein weiteres Beispiel für diejenigen, die daran interessiert sind

Label2 = ExecuteExcel4Macro("'" & url & "[" & Fichier_Excel & "]Liste'!" & "R11C8") & "\" & _
         ExecuteExcel4Macro("'" & url & "[" & Fichier_Excel & "]Liste'!" & "R11C7") & _
         "-STEP\"  'URL sortie
2 „Gefällt mir“

Es ist immer noch seltsam, dass die Funktion "ExecuteExcel4Macro" Tabellenkoordinaten wie " Zeile "+" Spalte " akzeptiert, aber nicht die "Range... Die Freuden des Rechnens und seine Geheimnisse... :crazy_face:

1 „Gefällt mir“

Wie gesagt, ich denke, dass die SW-API auf 64-Bit-Funktionen basiert, während es in Excel 32 sind.
Wenn Excel in 64 wäre, gäbe es meiner Meinung nach kein Problem.
Ich habe den Fall einiger Makros, die nur aus SW gestartet werden können und fehlerhaft sind, wenn ich sie aus Excel starte

2 „Gefällt mir“