Thomas Risi Softwareentwicklung

Überprüfen ob Excel-Instanz geöffnet ist

Eine der beliebten Fragen in diversen Foren ist, ob bereits eine Instanz von Excel (Word, Outlook, etc.) geöffnet ist. Hier also ein Beispiel, wie man mit Excel verfahren könnte.

Man kann es aber ebenso auf Word, Outlook, usw. anwenden.

Option Explicit Private Sub Command1_Click() ' Hier werden 2 ObjectVariablen erstellt. Um dies so schreiben zu können, ' muß bei den Verweisen in Ihrem Projekt ein entsprechender Eintrag auf ' die jeweilige Objektbibliothek existieren. Dim myExcel As Excel.Application ' Variable für Excel-Instanz Dim wb As Excel.Workbook ' Variable für Excel-Workbook ' Die Variablen xlClose/wbClose halten fest ob bereits eine Instanz ' von Excel/WorkBook geöffnet ist. Dim xlClose As Boolean: xlClose = False Dim wbClose As Boolean: wbClose = False ' Ein möglicher Fehler wird abgefangen. On Error Resume Next ' Jetzt wird versucht auf eine offene Excel-Instanz zuzugreifen. Wenn ' eine Instanz geöffnet ist, so wird diese der Variablen myExcel zugewiesen. Set myExcel = GetObject(, "excel.application") ' Nun wird überprüft, ob die Variable noch den Wert 'Nothing' hat. Wenn ' dem so ist, dann ist die Zuweisung einer Excel-Instanz gescheitert, was ' bedeutet, das Excel nicht geöffnet war. If myExcel Is Nothing Then ' Jetzt wird explizit eine neue Excel-Instanz geöffnet ... Set myExcel = CreateObject("excel.application") ' Man könnte hier nochmal abfragen ob myExcel jetzt einen gültigen ' Wert besitzt, und ggf. Abbrechen. ' In der Variable xlClose wird noch vermerkt, daß eine neue Instanz erstellt wurde ... xlClose = True End If ' Da jetzt eine Excel-Instanz existiert, kann man auch gleich noch ' versuchen, dem WorkBook-Objekt eine bereits geöffnete Arbeitsmappe ' zuzuweisen. Hier wird nach dem gleichen Prinzip verfahren, wie oben. Set wb = myExcel.Workbooks("MeineMappe.xls") ' Abfragen ob 'wb' den Wert 'Nothing' hat, und falls ja, das gewünschte ' WorkBook öffnen und zuweisen. If wb Is Nothing Then Set wb = myExcel.Workbooks.Open("C:\MeinPfad\MeineMappe.xls") ' Evtl. nochmal prüfen ob wb nun existiert ... ' Wiederum in der Variable wbClose festhalten. wbClose = True End If On Error GoTo 0 On Error GoTo errorhandler ' So, nun wird alles Erforderliche im Excel-WorkBook erledigt ... ' .... ' .... ' Wenn nun Alles getan ist, geht es an's Aufräumen ... ' Wurde die Mappe extra geöffnet? Wenn ja, wird sie wieder geschlossen. If wbClose Then wb.Close ' Object wieder freigeben ... Set wb = Nothing ' Wurde Excel extra geöffnet? Wenn ja, wird es wieder beendet. If xlClose Then myExcel.Quit ' Object wieder freigeben ... Set myExcel = Nothing Exit Sub errorhandler: ' Hier noch evtl. Fehler behandeln ... End Sub

Bewerten Sie bitte dieses Programm.
1 2 3 4 5
Weniger nützlich Sehr nützlich
Bitte teilen Sie uns mit, warum Sie das Programm so bewertet haben. (optional)