Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1056to1060
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Verweis von Word auf geöffnete Excel-Datei

Verweis von Word auf geöffnete Excel-Datei
04.03.2009 09:41:19
Word
Hallo Ihr Spezialisten,
ich möchte von Word aus auf eine bereits geöffnete Excel-Datei zugreifen. Das ist wichtig: die Datei ist schon offen! Mein Versuch ein Workbook-Objekt auf die Datei zu setzen ist bisher gescheitert. Daher bitte ich hier um Unterstützung. Ich habe es mit dem folgenden Code probiert.
Hier der Code, wie er in Word in einem Modul steht:

Public Sub VerweisXLS()
Dim xlsApp  As Excel.Application
Dim xlsFile As Excel.Workbook
Dim xlsArbeitsDatei As Excel.Workbook
' Excel initialisieren
Set xlsApp = Excel.Application
MsgBox xlsApp.Workbooks.Count ' Debug-Meldung!
For Each xlsFile In xlsApp.Workbooks
If xlsFile.Name = "XY" Then
xlsFile.Activate
Set xlsArbeitsDatei = xlsFile
' ... hier geht es spaeter weiter
End If
Next
Set xlsApp = Nothing
Set xlsFile = Nothing
Set xlsArbeitsDatei = Nothing
End Sub


Das Problem: obwohl mehere Excel-Dateien geöffnet sind, wird
- in der Msgbox die Anzahl der geöffneten Dateien als 0 ausgegeben
- geht das Programm nicht in die Schleife, sondern überspringt sie
Es wirkt so, als würde "xlsApp" nicht auf die Excel-Instanz mit den geöffneten Dateien verweisen!
Genau das möchte ich aber!
Danke für hilfreiche Unterstützung.
Grüsse,
kgurr

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verweis von Word auf geöffnete Excel-Datei
04.03.2009 09:52:15
Word
Hallo,
ich denke dies wird nicht so einfach sein, sollte es überhaupt gehen.
Selbst den Zugriff von Excel auf eine andere bereits geöffnete Excel- Instanz,
konnte ich noch nicht lösen.
Du müsstest zuerst den Fensterhandle ermitteln (das ist noch lösbar),
aber die die Übergabe an eine Objektvariable mittels HWND konnte ich bisher nicht lösen.
Sollte es eine Lösung geben, würde mich dies auch interessieren, daher Frage auf offen.
Gruß Tino
AW: Verweis von Word auf geöffnete Excel-Datei
04.03.2009 09:59:45
Word
Hallo Tino,
danke für Deinen Hinweis. Ich kann das nicht wirklich glauben: es kann doch nicht so schwierig sein, auf eine geöffnete Datei zuzugreifen? Mein Problem ist, dass die geöffnete XLS mehrere MBs gross ist und ich sehr oft darauf zugreifen muss. Die Datei jedes Mal zu schliessen und wieder zu öffnen ist einfach nicht möglich. Daher suche ich nach einer eleganten Möglichkeit!
Vieleicht hat sonst wer noch eine funktionierende und elegante Möglichkeit ... ?
Besten Danke im Voraus.
kgurr
Anzeige
AW: Verweis von Word auf geöffnete Excel-Datei
04.03.2009 10:04:47
Word
Hallo,
"...ich kann das nicht wirklich glauben..."
Selbst Excel selbst hat Probleme dabei.
Mach mal zwei Excel Instanzen auf und kopiere ein bar Zellen von der einen in die andere.
Excel wird die Zellen nicht so ohne weiteres einfügen wie man es gewohnt ist.
Gruß Tino
AW: Verweis von Word auf geöffnete Excel-Datei
04.03.2009 10:12:46
Word
Hallo kgurr,
es ist auch nicht so schwer, so sollte es gehen (zumindest wenn sicher ist, dass Exel gestartet ist, sonst gibt's einen Laufzeitfehler):

Public Sub VerweisXLS()
Dim xlsApp  As Excel.Application
Dim xlsFile As Excel.Workbook
Dim xlsArbeitsDatei As Excel.Workbook
' Excel initialisieren
Set xlsApp = GetObject(, "Excel.Application")
MsgBox xlsApp.Workbooks.Count ' Debug-Meldung!
For Each xlsFile In xlsApp.Workbooks
If xlsFile.Name = "XY" Then
'überflüssig: xlsFile.Activate
Set xlsArbeitsDatei = xlsFile
' ... hier geht es spaeter weiter
End If
Next
Set xlsApp = Nothing
Set xlsFile = Nothing
Set xlsArbeitsDatei = Nothing
End Sub


Herzlichen Gruß
Jürgen

Anzeige
Mercy - funktioniert super!
04.03.2009 10:27:54
kgurr
Hallo Jürgen,
tausend Danke für den Code. Einfach + funktioniert! Echt super.
Danke auch für den Hinweis, dass Excel geöffnet sein muss. Hier habe ich bereits eine Funktion, welche das prüft. Es ist die folgende:

Private Function ExcelIsOpend() As Boolean
Dim gsMsgAntw  As String
Dim oXLS As Object
ExcelIsOpend = True
On Error GoTo NotOpened
Set oXLS = GetObject(Class:="Excel.Application") ' Excel geöffnet?
On Error GoTo 0
Set oXLS = Nothing
Exit Function
NotOpened:     ' Excel ist nicht geöffnet
ExcelIsOpend = False
gsMsgAntw = MsgBox("Die Anwendung Excel ist nicht geöffnet!", vbExclamation, "Excel nicht geö _
_
ffnet")
End Function


Ich wünsche Dir einen schönen Tag!
Grüsse,
kgurr

Anzeige
AW: Verweis von Word auf geöffnete Excel-Datei
04.03.2009 10:33:12
Word
Hallo,
funktioniert ja wirklich, manchmal ist das einfache so na und man kann es nicht finden.
Danke
Gruß Tino
noch eine Frage?
04.03.2009 11:45:25
Tino
Hallo,
ach so jetzt bin nochmal dahinter gestiegen warum es bei mir nie funktionierte.
Habe es immer auf Excelebene getestet,
leider geht es nicht wenn mehrere Instanzen von Excel geöffnet sind,
er nimmt einfach die erste Instanz und die andere wird ignoriert.
Oder hast Du dafür auch eine Lösung?
Gruß Tino
AW: noch eine Frage?
04.03.2009 11:57:33
kgurr
Hallo Tino,
leider kann ich Dir da nicht helfen - ich achte darauf, das nur eine Instanz in Excel geöffnet ist. Die Lösung von oben funktioniert bei mir wunderbar.
Sorry - doch vielleicht hat jemand anders noch eine Idee ... ?
Grüsse,
kgurr
Anzeige
AW: noch eine Frage?
04.03.2009 13:42:07
Jürgen
Hallo Tino,
eine sichere Lösung für das Problem habe ich nicht. Wenn Du gewollt mehrere Instanzen von Excel erzeugst, kannst Du sie dabei bereits in eigenen Objektvariablen festhalten. Wenn der Anwender mehrere Instanzen geöffnet hat, wird es nicht gelingen, mit GetObject(,"Excel.Appliction") eine gewünschte von diesen herauszupicken - außer man kann verschmerzen, dass (für den konkreten Anlass unerwünschte) Instanzen geschlossen werden. Dann könnte man sich eine Instanz zurückgeben lassen und falls es die falsche ist (woran man das dann auch immer festmacht), schließt man sie und wiederholt dies solange, bis man die gewünschte erhalten hat - oder es keine mehr gibt, weil die passende Instanz gar nicht geöffnet war.
Je nach Anwendungsfall würde ich daher sicherheitshalber eine weitere Instanz eröffnen, über die ich dann die Kontrolle habe. Oder, wenn es um eine bestimmte Datei geht (also Name und Pfad bekannt bzw. ermittelbar), hole ich mir sie direkt als Datei-Objekt mit
Dim objDatei as workbook
Set objDatei = getobject("d:\test\Meine Datei.xls")
Herzlichen Gruß
Jürgen
Anzeige
AW: noch eine Frage?
04.03.2009 23:11:30
Tino
Hallo,
"...Wenn Du gewollt mehrere Instanzen von Excel erzeugst..."
Bei gewollt ist klar.
Aber die ich meine sind z. Bsp. Auswerttools,
die Maschinendaten aufbereiten und Exceldateien öffnen und diese sind in eigenen Instanzen.
Also muss ich diese erst speichern und wieder neu öffnen, damit ich sauber an die Daten komme.
Was habe ich gemacht, ich habe mir halt selbst ein Programm geschrieben, dass diese Daten aufbereitet.
Jetzt habe ich dieses Programm, hätte ich aber eine Möglichkeit gefunden auf diese Instanz zuzugreifen, hätte ich dass Rad nicht neu erfinden müssen. ;-(
Egal, danke für die Antworten.
Anzeige
AW: noch eine Frage?
05.03.2009 16:02:57
Jürgen
Hallo Tino,
in meiner bescheidenen Testumgebung funktionierte der Weg über getobject auf die Datei - unabhängig davon, ob sie bereits geöffnet war oder nicht. Und über das Datei-Objekt gelangst Du auch an die Excel-Instanz, in der sie geöffnet ist.
Herzlichen Gruß
Jürgen
AW: noch eine Frage?
05.03.2009 16:24:11
Tino
Hallo,
von einer Excel Instanz zur anderen?
Das geht bei mir nicht, auf keiner meiner Rechner und auf der arbeit auch nicht.
Gruß Tino
Warum nicht?
05.03.2009 22:02:42
Jürgen
Hallo Tino,
ich weiß natürlich nicht, was in den einzelnen Excel-Instanzen in Deinem Fall geschieht, aber so ganz grundsätzlich ist der Zugriff auf eine andere, bereits laufende Excel-Instanz durchaus möglich. Versuche doch mal folgenden Test:
Starte Excel, schreibe in Tabelle1!a1 einen Testeintrag und speichere die Datei.
Erzeuge oder öffne noch zwei Excel-Dateien => in der aktuellen Excel-Instanz sind drei Dateien geöffnet
Starte eine weitere Excel-Instanz und lege in dieser folgenden Code ab:

Sub ZweiInstanzen()
Dim objDatei As Workbook
Set objDatei = GetObject("d:\temp\Auswertung.xls")
Debug.Print ThisWorkbook.Application.Workbooks.Count
Debug.Print objDatei.Application.Workbooks.Count
Debug.Print objDatei.Sheets(1).Range("a1").Value
objDatei.Sheets(1).Range("a1").Value = "ABC"
Debug.Print objDatei.Sheets(1).Range("a1").Value
End Sub


Passe noch den Dateinamen im GetObject-Statement auf die erste erstellte Datei an und führe den Code aus - ich denke, das im Direktfenster sichtbare Ergebnis zeigt, dass der Zugriff auf eine andere Excel-Instanz grundsätzlich möglich ist.
Herzlichen Gruß
Jürgen

Anzeige
AW: Warum nicht?
05.03.2009 22:38:47
Tino
Hallo,
habe dieses Szenario mal Durchgespielt, dass Funktioniert.
Aber mir ist aber auch der Pfad der anderen Instanz bekannt,
ich weis also wo diese her kommt.
Aber auch das wuste ich nicht.
Muss mal schauen ob ich mit dieser neuen Erkenntnis weiter komme,
wenn dies Instanz unbekannt ist.
Weil wie von dem Tool für diese Maschine (habe ich oben mal angesprochen),
ist mir diese Excel Instanz unbekannt.
Ich danke Dir dafür.
Gruß Tino

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige