Tipp 0411 Excel-Automatisierungsfehler vermeiden
Autor/Einsender:
Datum:
  Angie
29.08.2004
Entwicklungsumgebung:   VB/VBA
Bei der Automation von Excel 97 oder höher kann es unter anderem zu einer der folgenden Fehlermeldungen kommen:
 
Laufzeitfehler '1004'
Method '<name of method>' of object '_Global' failed

- oder -

Application-defined or object-defined error
 
Bei der Automation von Excel 95:
 
Laufzeitfehler '462'
Der Remote-Server-Computer existiert nicht oder ist nicht
verfügbar.
 
Ursache der Fehlermeldungen
Auf Grund eines Zugriffs auf ein Excel-Objekt, eine -Methode oder -Eigenschaft ohne einen gültigen Objektverweis, hat Visual Basic einen Verweis zu Excel eingerichtet, der erst wieder freigegeben wird, wenn das Programm beendet wird. Dieser fehlerhafte Verweis verursacht die obigen Fehlermeldungen, wenn der Code mehr als einmal ausgeführt wird.
Problemlösung
Ändern Sie den Code so, dass jeder Aufruf eines Excel-Objekts, einer -Methode oder -Eigenschaft durch die entsprechende Objektvariable definiert wird.
Weitere Informationen
Zur Automation von Microsoft Excel legen Sie Objektvariablen fest, die normalerweise auf das Application-Objekt (Excel-Anwendung) und auf ein Workbook-Objekt (Arbeitsmappe) verweisen. Selbstverständlich können auch weitere Objektvariablen festgelegt werden, die beispielsweise auf ein Tabellenblatt (Worksheet), einen Bereich (Range) oder andere Objekte im Excel-Objektmodell verweisen.
Wenn im Code ein Excel-Objekt, eine -Methode oder -Eigenschaft verwendet wird, sollte der Aufruf nur in Verbindung mit einer entsprechenden Objektvariable erfolgen. Fehlt diese Objektvariable, legt Visual Basic eine verborgene globale Variable für die aktuell ausgeführte Instanz fest.
Wird Excel beendet oder die deklarierte Objektvariable freigegeben, verweist die verborgene globale Variable auf ein ungültiges (zerstörtes) Objekt. Bei erneutem Ausführen des Automatisierungscodes, schlagen Aufrufe zu der verborgenen Objektvariable fehl.
Beispiel mit fehlerhaftem Code
Mit folgendem Beispiel kann der Fehler reproduziert werden.
Für die Ausführung des Codes muss zur Entwurfszeit die entsprechende Microsoft Excel x.0 Object Library in das Projekt eingebunden werden.
 
Sub Demo_ExcelAutomationError()

1:   Dim objXLApp   As Excel.Application
2:   Dim objXLWkb   As Excel.Workbook
3:   Dim objXLWks   As Excel.Worksheet

4:   Set objXLApp = CreateObject("Excel.Application")
5:   objXLApp.Visible = True

6:   Set objXLWkb = objXLApp.Workbooks.Add
7:   Set objXLWks = objXLWkb.Worksheets(1)

8:   objXLWks.Range(Cells(1, 1), Cells(1, 1)).Value = "Hi"

9:   Set objXLWks = Nothing

10:   With objXLWkb
11:     .Saved = True
12:     .Close
13:  End With

14:  Set objXLWkb = Nothing

15:  objXLApp.Quit
16:  Set objXLApp = Nothing

End Sub
 
Führen Sie die Prozedur das erste Mal aus, tritt kein Fehler auf. Es wurde jedoch auf Grund fehlender Objektkennzeichner in der Codezeile 8 ein Verweis zu Excel erstellt, der nicht wieder freigegeben wurde.
Bei erneutem Aufruf der Prozedur tritt der oben beschriebene Fehler in Codezeile 8 auf, da bei der Cells-Methode (in zwei Fällen) der Objektkennzeichner objXLWks für das Tabellenblatt fehlt.
Ändern Sie
 
8: objXLWks.Range(Cells(1, 1), Cells(1, 1)).Value = "Hi"
 
- in -
 
8:  objXLWks.Range(objXLWks.Cells(1, 1), _
              objXLWks.Cells(1, 1)).Value = "Hi"
 
- oder noch besser in -
 
8:  With objXLWks
      .Range(.Cells(1, 1), .Cells(1, 1)).Value = "Hi"
    End With
 
Nach Änderung der Codezeile 8 kann die Prozedur immer wieder fehlerfrei ausgeführt werden.
Excel-VB(A)-Hilfe
Wurde im Projekt ein Verweis auf die Microsoft Excel x.0 Object Library gesetzt, stehen die Beispiele für die Objekte, Methoden und Eigenschaften des Excel-Objektmodells in der Excel-VB(A)-Hilfe-Datei zur Verfügung. Befindet sich der Cursor im Code in einem Schlüsselwort, kann die Hilfe mit der Taste [F1] aufgerufen werden.
Die Beispiele in den Hilfethemen sind jedoch für Excel VBA (Visual Basic for Applications) und müssen für die Automation von Excel mit den entsprechenden Objektkennzeichnern ergänzt werden.
Beispiel Cells-Eigenschaft in der Excel-VB(A)-Hilfe
 
Worksheets("Sheet1").Activate
Range(Cells(1, 1), Cells(5, 3)).Font.Italic = True
 
Beispiel für die Automation von Excel
(in Anlehnung an die Objektvariablen in obigem Beispiel)
 
With objXLWks
  .Range(.Cells(1, 1), .Cells(5, 3)).Font.Italic = True
End With
 
Hinweis
Teile dieses Artikels sind eine freie Übersetzung des englischsprachigen Artikels der Microsoft Knowledge Base:
178510 Excel automation fails second time code runs
Weitere Links zum Thema
Automation mit Office-Anwendungen

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 15. Juli 2011