Die Excel-Automatisierung schlägt bei der zweiten Codeausführung fehl

Symptome

Beim Ausführen von Code, der die Automatisierung verwendet, um Microsoft Excel zu steuern, kann einer der folgenden Fehler auftreten:

In Microsoft Excel 97 und neueren Versionen von Excel wird eine der folgenden Fehlermeldungen angezeigt:

Fehlermeldung 1

Hinweis

Laufzeitfehler '1004':
Methode '<Name der Methode>' des Objekts '_Global' fehlgeschlagen

Fehlermeldung 2

Hinweis

Anwendungs- oder objektdefinierter Fehler

In Microsoft Excel 95 wird eine der folgenden Fehlermeldungen angezeigt:

Fehlermeldung 1

Hinweis

Laufzeitfehler '-2147023174'
OLE-Automatisierungsfehler

Fehlermeldung 2

Hinweis

Laufzeitfehler '462':
Der Remoteservercomputer ist nicht vorhanden oder nicht verfügbar.

Ursache

Visual Basic hat aufgrund einer Codezeile einen Verweis auf Excel eingerichtet, der ein Excel-Objekt, eine Excel-Methode oder -Eigenschaft aufruft, ohne das Element mit einer Excel-Objektvariablen zu qualifizieren. Visual Basic gibt diesen Verweis erst frei, wenn Sie das Programm beenden. Dieser fehlerhafte Verweis beeinträchtigt den Automatisierungscode, wenn der Code mehrmals ausgeführt wird.

Lösung

Um dieses Problem zu beheben, ändern Sie den Code so, dass jeder Aufruf eines Excel-Objekts, einer Excel-Methode oder -Eigenschaft mit der entsprechenden Objektvariablen qualifiziert wird.

Status

Dieses Verhalten ist beabsichtigt.

Weitere Informationen

Um Microsoft Excel zu automatisieren, richten Sie eine Objektvariable ein, die normalerweise auf das Excel-Anwendungsobjekt oder das Excel-Arbeitsmappenobjekt 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 zur Verwendung eines Excel-Objekts, einer Excel-Methode oder -Eigenschaft schreiben, sollten Sie dem Aufruf immer die entsprechende Objektvariable voranstellen. Tun Sie dies nicht, erstellt Visual Basic einen eigenen Verweis auf Excel. Dieser Verweis kann zu Problemen führen, wenn Sie versuchen, den Automatisierungscode mehrmals auszuführen. Beachten Sie, dass selbst wenn die Codezeile mit der Objektvariablen beginnt, ein Excel-Objekt, eine Excel-Methode oder eine Excel-Eigenschaft in der Mitte der Codezeile aufgerufen werden kann, der keine Objektvariable vorangestellt ist.

Die folgenden Schritte veranschaulichen, wie dieses Problem reproduziert und behoben werden kann.

Schritte zum Reproduzieren des Verhaltens

  1. Starten Sie ein neues Standard EXE-Projekt in Visual Basic. Form1 wird standardmäßig erstellt.

  2. Klicken Sie im Menü Projekt auf Verweise, und suchen Sie dann in der Objektbibliothek nach der Excel-Version, die Sie automatisieren möchten.

  3. Platzieren Sie ein CommandButton-Steuerelement auf Form1.

  4. 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
    
    
  5. Klicken Sie im Menü "Ausführen " auf "Start", oder drücken Sie F5, um das Programm zu starten.

  6. Klicken Sie auf das CommandButton-Steuerelement . Es tritt kein Fehler auf. Es wurde jedoch ein Verweis auf Excel erstellt und wurde nicht freigegeben.

  7. Klicken Sie erneut auf das CommandButton-Steuerelement . Beachten Sie, dass Sie eine der im Abschnitt "Symptome" beschriebenen Fehlermeldungen erhalten.

    Hinweis Die Fehlermeldung tritt auf, weil sich der Code auf die Methode der Zelle bezieht, ohne dem Aufruf den
    xlSheet-Objektvariable.

  8. 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"
    
    
  9. Führen Sie das Programm erneut aus. Beachten Sie, dass Sie den Code mehrmals ausführen können, ohne eine Fehlermeldung zu erhalten.

Referenzmaterial

189618 Möglicherweise wird die Fehlermeldung "Laufzeitfehler '-2147023174" (800706ba)" oder "Laufzeitfehler 462" angezeigt, wenn Sie Visual Basic-Code ausführen, der die Automatisierung zur Steuerung verwendet Word