Artikel-ID: 178510 - Geändert am: Freitag, 23. November 2007 - Version: 6.1

Die Automatisierung von Excel schlägt fehl, wenn Sie den Code zum zweiten Mal ausführen

Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
178510  (http://support.microsoft.com/kb/178510/EN-US/ ) Excel automation fails second time code runs
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Bei der Ausführung von Code, der zur Steuerung von Microsoft Excel Automatisierung verwendet, tritt möglicherweise einer der folgenden Fehler auf:

In Microsoft Excel 97 und in höheren Versionen von Excel wird eine der folgenden Fehlermeldungen angezeigt:
Fehlermeldung 1
Laufzeitfehler '1004':
Die Methode '<Name der Methode>' des Objekts '_Global' ist fehlgeschlagen>
Fehlermeldung 2
Anwendungs- oder objektdefinierter Fehler.
In Microsoft Excel 95 wird eine der folgenden Fehlermeldungen angezeigt:
Fehlermeldung 1
Laufzeitfehler '-2147023174':
Fehler bei OLE-Automatisierung
Fehlermeldung 2
Laufzeitfehler '462':
Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar.

Ursache

Visual Basic hat einen Verweis zu Excel eingerichtet, der mittels einer Codezeile funktioniert, die ein Excel-Objekt, eine Excel-Methode oder -Eigenschaft aufruft, ohne das Element durch eine Excel-Objektvariable zu definieren. Visual Basic gibt diesen Verweis erst wieder frei, wenn Sie das Programm beenden. Dieser unzureichend definierte Verweis verursacht einen Konflikt mit dem Automatisierungscode, wenn der Code mehr als ein Mal ausgeführt wird.

Lösung

Um dieses Problem zu beheben, ändern Sie den Code so, dass jeder Aufruf eines Objekts, einer Methode oder Eigenschaft in Excel durch die entsprechende Objektvariable definiert wird.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Weitere Informationen

Zum Automatisieren von Microsoft Excel legen Sie eine Objektvariable fest, die normalerweise auf die Excel-Anwendung oder das Excel-Arbeitsmappenobjekt verweist. Dann können weitere Objektvariablen festgelegt werden, um auf eine Arbeitsmappe, einen Bereich oder andere Objekte im Microsoft Excel-Objektmodell zu verweisen. Wenn Sie Code schreiben, der ein Excel-Objekt, eine Excel-Methode oder -Eigenschaft verwendet, sollte dem Aufruf immer eine entsprechende Objektvariable vorhergehen. Anderenfalls erstellt Visual Basic einen eigenen Verweis auf Excel. Dieser Verweis könnte zu Problemen führen, wenn Sie versuchen, den Automatisierungscode mehrere Male auszuführen. Beachten Sie, dass selbst wenn die Codezeile mit der Objektvariablen beginnt, ein Aufruf eines Excel-Objekts, einer Excel-Methode oder -Eigenschaft in der Mitte der Codezeile erfolgen kann, der keine Objektvariable vorangestellt ist.

Die folgenden Schritte veranschaulichen, wie das Problem reproduziert und korrigiert werden kann.

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie in Visual Basic ein neues Standard-EXE-Projekt. Form1 wird standardmäßig erstellt.
  2. Klicken Sie im Menü Projekt auf Verweise, und ermitteln Sie anschließend anhand der Objektbibliothek die Excel-Version, die Sie automatisieren möchten.
  3. Fügen Sie ein Steuerelement CommandButton in Form1 ein.
  4. Kopieren Sie folgendes 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
    					
  5. Klicken Sie im Menü Ausführen auf Starten, oder drücken Sie [F5], um das Programm zu starten.
  6. Klicken Sie auf das Steuerelement CommandButton. Ein Fehler tritt nicht auf. Es wird jedoch ein Verweis zu Excel erstellt, der aber nicht freigegeben wird.
  7. Klicken Sie erneut auf das Steuerelement CommandButton. Sie werden feststellen, dass jetzt eine der im Abschnitt "Problembeschreibung" erläuterten Fehlermeldungen angezeigt wird.

    Hinweis: Der Fehler tritt auf, weil der Code auf die Methode der Zelle verweist, ohne dass dem Aufruf die Objektvariable xlSheet vorangeht.
  8. Halten Sie das Projekt an, und ändern Sie folgende Codezeile:
    xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
    					
    Ändern Sie die Codezeile etwa so wie in der folgenden Codezeile.
    xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
    					
  9. Führen Sie das Programm erneut aus. Sie werden feststellen, dass Sie den Code nun mehrfach ausführen können, ohne dass eine Fehlermeldung angezeigt wird.

Informationsquellen

Weitere Informationen finden Sie in den folgenden Artikeln der Microsoft Knowledge Base:
167223  (http://support.microsoft.com/kb/167223/DE/ ) OFF97: Hilfedatei für Microsoft Office 97-Automation verfügbar
189618  (http://support.microsoft.com/kb/189618/DE/ ) Problem: Automatisierungsfehler beim Aufruf unzureichend definierter Methode oder Eigenschaft

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95a
  • Microsoft Excel 95 Standard Edition
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 4.0 Standard Edition
  • Microsoft Visual Basic for Applications 5.0
  • Microsoft Office XP Developer Edition
  • Microsoft Office 2000 Developer Edition
Keywords: 
kbtshoot kbautomation kbprb KB178510
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
 

SPRACHE AUSWÄHLEN