Lesen einer geschlossenen Excel-Datei aus SolidWorks in VBA (SW 2016)

Hallo

Ich möchte die Liste einer ComboBox mit einer Excel füllen, ohne die betreffende Excel-Datei zu öffnen (meine ComboBox befindet sich in einem SolidWorks-Makro).

Ich muss also in der Lage sein, Zellen aus SolidWorks in einem geschlossenen Excel zu lesen.

 

Um in Excel eine Zelle in einem anderen geschlossenen Excel zu lesen , wird der folgende VBA-Code verwendet:

'Lecture de la cellule A1 dans la Feuil1 du classeur fermé				

Wenn ich versuche , diesen Code in SolidWorks zu verwenden, erhalte ich einen Kompilierungsfehler , der besagt, dass die Funktion ExecuteExcel4Macri nicht definiert ist.

 

Hat jemand eine Lösung?       Vielen Dank im Voraus für Ihre Hilfe.

Siehe diesen Link 

https://www.developpez.net/forums/d1388072/logiciels/microsoft-office/excel/macros-vba-excel/macro-copier-plage-d-fichier-excel-ferme/

@+

3 „Gefällt mir“

Hallo

Ich denke, wie im Link von gt22 erklärt, dass es für Sie einfacher sein wird, an einer offenen Excel-Datei zu arbeiten. Sie können diese Excel-Datei öffnen, bearbeiten, speichern und dann programmgesteuert in Ihrem Makro schließen, ohne das Excel-Fenster anzuzeigen, also auf transparente Weise für den Benutzer.

Herzliche Grüße

2 „Gefällt mir“

Vor allem müssen Sie die Excel-Zieldatei speichern

Es war ganz einfach... Ich bekomme den vollständigen Pfad mit ActiveWorkbook.Path und es funktioniert jetzt einwandfrei ... Die einzige Bedingung ist, dass sich meine Quelldateien im selben Ordner oder in einem Unterordner der Arbeitsmappe befinden... Keine große Sache... Danke noch einmal! Dummerweise habe ich ein paar Tage verloren

im selben Ordner oder Unterordner , damit die Links gut funktionieren

nach dem, was ich verstanden habe ;-(

@+

1 „Gefällt mir“

Wenn Sie es wirklich in einem geschlossenen Excel machen möchten, sehen Sie sich an: http://silkyroad.developpez.com/VBA/ClasseursFermes/ aber es scheint viele Einschränkungen bei den Möglichkeiten zu geben ...

2 „Gefällt mir“

Würden Sie die Referenzen Microsoft.Interop.Office und Microsoft.Interop.Excel nicht zufällig verpassen?

Wenn diese Verweise nicht aktiviert sind, können Sie die Funktion ExecuteExcel4Macro() nicht verwenden, da sie in keiner Assembly, auf die verwiesen wird, vorhanden ist.

3 „Gefällt mir“

Vielen Dank Yves.T,

Mir fehlte der Hinweis "Microsoft Excel XX.X Object library".

Woher wissen wir, welche Referenzen für welchen Code benötigt werden?

 

Andernfalls habe ich zum Betreiben meiner Combobox den folgenden Code verwendet: 

Private Sub UserForm_Initialize()
Dim i As Byte
Dim e As String

i = 1
Do
    ComboBox1.AddItem ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")
    i = i + 1
    e = ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xlsx]Feuil1'!R" & i & "C1")

Loop While Len(e) > 1

End Sub

Glauben Sie, dass wir einen einfacheren Code erstellen können?

Warum nicht eine "ComboBox1.RowSource" verwenden, die ich nicht mit dem ExecuteExcel4Macro() kombinieren konnte?

Es ist nicht kompliziert:

Wenn Sie eine Prozedur oder Funktion verwenden , die Sie erstellt haben, gibt es keine Referenz, die hinzugefügt werden muss.

Wenn Sie eine Prozedur oder Funktion verwenden , die Sie nicht erstellt haben, müssen Sie einen Verweis hinzufügen.

Wenn Sie F1 drücken, während sich der Cursor auf einer Anweisung befindet, wird die Hilfe zu dieser Funktion/Prozedur geöffnet. Die Montage ist in der Hilfe angegeben.

Wenn Sie Excel verwenden müssen, benötigen Sie generell den Verweis auf Office (das die grundlegenden Objekte für Office-Anwendungen bereitstellt) und einen Verweis auf Excel (um Zugriff auf die spezifischen Objekte, Prozeduren und Funktionen von Excel zu erhalten)

Wenn Sie Word verwenden, benötigen Sie den Verweis auf Office und Word.

Um das Makro zu vereinfachen, sollte ein Array von Strings zurückgegeben werden, es sei denn, Sie können einen Bereich als Parameter an die Funktion ExecuteExcel4Macro() übergeben. Alles, was Sie noch tun müssen, ist, das Array an die RowSource-Eigenschaft des Kombinationsfelds zu binden. (Um zu überprüfen, ob es sich bei dem vom Makro zurückgegebenen Wert tatsächlich um ein Array von Strings handelt, konvertieren Sie ihn, falls nicht)

Es ist auch möglich, dies wie in dem von d.roger vorgeschlagenen Link zu tun.

Die Verwendung von ADO dafür ist ein bisschen so, als würde man eine Atomwaffe einsetzen, um eine Mücke zu töten, aber es ist weitgehend verwerflich. (solange wir das Prinzip der ODA verstehen)

Einfach ausgedrückt handelt es sich bei ADO um eine Reihe von Tools, mit denen Sie auf Daten zugreifen können, unabhängig davon, ob es sich um eine SQL- oder Access-Datenbank, eine Excel-Datei usw. handelt.

Es verwendet eine Datenbank-Engine, SQL-Abfragen und einen Zeiger zum Abrufen von Daten. Wir öffnen eine Verbindung, indem wir die zu verwendende Datenbank-Engine und die Datei angeben, wir stellen eine Frage an die Datenbank-Engine (die SQL-Abfrage) und wir durchsuchen das Ergebnis der Abfrage mit dem Zeiger.

2 „Gefällt mir“

OK, vielen Dank für diese Information Yves.T,

Für die ADO-Methode wollte ich Folgendes vermeiden: unzureichende Methode (zu mächtig für die einfache Sache, die ich tun möchte).

Also bleibe ich bei der Funktion ExecuteExcel4Macro() .