Problembeschreibung
Beim Ausführen von Code, der Automation zum Steuern von Microsoft Excel verwendet, kann einer der folgenden Fehler auftreten:
In Microsoft Excel 97 und höheren Excel-Versionen wird eine der folgenden Fehlermeldungen angezeigt:
Fehlermeldung 1
Laufzeitfehler "1004":
Fehler bei methode '<name of method>' of object '_Global'
Fehlermeldung 2
Anwendungs- oder objektdefinierter Fehler.
In Microsoft Excel 95 erhalten Sie eine der folgenden Fehlermeldungen:
Fehlermeldung 1
Laufzeitfehler "-2147023174"
OLE-Automatisierungsfehler
Fehlermeldung 2
Laufzeitfehler "462":
Der Remoteservercomputer ist nicht vorhanden oder nicht verfügbar.
Ursache
Visual Basic hat aufgrund einer Codezeile, die ein Excel-Objekt, eine Methode oder eine Eigenschaft aufruft, ohne das Element mit einer Excel-Objektvariablen zu qualifizieren, einen Verweis auf Excel eingerichtet. Visual Basic gibt diesen Verweis erst wieder frei, wenn Sie das Programm beenden. Dieser fehlerhafte Verweis beeinträchtigt automatisierungscode, wenn der Code mehr als einmal ausgeführt wird.
Lösung
Um dieses Problem zu beheben, ändern Sie den Code so, dass jeder Aufruf eines Excel-Objekts, einer Methode oder einer Eigenschaft mit der entsprechenden Objektvariablen qualifiziert wird.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
Um Microsoft Excel zu automatisieren, richten Sie eine Objektvariable ein, die in der Regel auf das Excel Application-Objekt oder das Excel Workbook-Objekt verweist. Andere Objektvariablen können dann so festgelegt werden, dass sie auf ein Arbeitsblatt, einen Bereich oder andere Objekte im Microsoft Excel-Objektmodell verweisen. Wenn Sie Code schreiben, um ein Excel-Objekt, eine Methode oder eine Excel-Eigenschaft zu verwenden, sollten Sie dem Aufruf immer die entsprechende Objektvariable vorangehen. Andernfalls richtet Visual Basic einen eigenen Verweis auf Excel ein. Dieser Verweis kann Probleme verursachen, wenn Sie versuchen, den Automatisierungscode mehrmals auszuführen. Beachten Sie, dass selbst wenn die Codezeile mit der Objektvariablen beginnt, ein Aufruf eines Excel-Objekts, einer Methode oder einer Eigenschaft in der Mitte der Codezeile erfolgen kann, der keine Objektvariable vorangestellt ist.
Die folgenden Schritte veranschaulichen, wie Sie dieses Problem reproduzieren und das Problem beheben.
Schritte zum Reproduzieren des Verhaltens
-
Starten Sie ein neues Standard EXE-Projekt in Visual Basic. Form1 wird standardmäßig erstellt.
-
Klicken Sie im Menü Projekt auf Verweise, und überprüfen Sie dann die Objektbibliothek für die Version von Excel, die Sie automatisieren möchten.
-
Platzieren Sie ein CommandButton-Steuerelement auf Form1.
-
Kopieren Sie das folgende Codebeispiel in das Codefenster von Form1.
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub
-
Klicken Sie im Menü Ausführen auf Start, oder drücken Sie F5, um das Programm zu starten.
-
Klicken Sie auf das CommandButton-Steuerelement . Es tritt kein Fehler auf. Es wurde jedoch ein Verweis auf Excel erstellt und nicht freigegeben.
-
Klicken Sie erneut auf das CommandButton-Steuerelement . Beachten Sie, dass Sie eine der Fehlermeldungen erhalten, die im Abschnitt "Symptome" erläutert werden.
Hinweis Die Fehlermeldung tritt auf, weil der Code auf die -Methode der Zelle verweist, ohne dem Aufruf mit dem
xlSheet-Objektvariable. -
Beenden Sie das Projekt, und ändern Sie die folgende Codezeile:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Ändern Sie die Codezeile so, dass sie der folgenden Codezeile ähnelt.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Führen Sie das Programm erneut aus. Beachten Sie, dass Sie den Code mehrmals ausführen können, ohne eine Fehlermeldung zu erhalten.
Informationsquellen
189618 Möglicherweise erhalten Sie die Fehlermeldung "Laufzeitfehler '-2147023174' (800706ba)" oder den "Laufzeitfehler '462'", wenn Sie Visual Basic-Code ausführen, der Automation verwendet, um Word