In diesem Tutorial wird erklärt, was ein VBA-Automatisierungsfehler bedeutet und wie er auftritt.
Excel besteht aus Objekten - dem Workbook-Objekt, dem Worksheet-Objekt, dem Range-Objekt und dem Cell-Objekt, um nur einige zu nennen. Jedes Objekt verfügt über mehrere Eigenschaften und Methoden, deren Verhalten mit VBA-Code gesteuert werden kann. Wenn der VBA-Code nicht richtig programmiert ist, kann ein Automatisierungsfehler auftreten. Es ist einer der frustrierendsten Fehler in VBA, da er oft ohne ersichtlichen Grund auftauchen kann, wenn Ihr Code perfekt aussieht!
(Weitere Informationen zu VBA-Fehlern finden Sie in unserem Fehlerbehandlungshandbuch.)
Verweis auf eine nicht mehr aktive Variable
Ein Automatisierungsfehler kann auftreten, wenn Sie über eine Variable auf eine Arbeitsmappe oder ein Arbeitsblatt verweisen, die Variable jedoch nicht mehr aktiv ist.
1234567891011 | UntertestAutomation()Dim strFile As StringDim wb als Arbeitsmappe'Datei öffnen und Arbeitsmappenvariable setzenstrFile = Application.GetOpenFilenameSet wb = Workbooks.Open(strFile)'Arbeitsmappe schließenwb.Schließen'versuchen Sie die Arbeitsmappe zu aktivierenwb.AktivierenEnd Sub |
Wenn wir den obigen Code ausführen, erhalten wir einen Automatisierungsfehler. Dies liegt daran, dass wir eine Arbeitsmappe geöffnet und dieser Arbeitsmappe eine Variable zugewiesen haben. Wir haben dann die Arbeitsmappe geschlossen, aber in der nächsten Codezeile versuchen wir, die geschlossene Arbeitsmappe zu aktivieren. Dies führt zu dem Fehler, da die Variable nicht mehr aktiv ist.
Wenn wir eine Arbeitsmappe aktivieren möchten, müssen wir zuerst die Arbeitsmappe geöffnet haben!
Speicherüberlastung
Dieser Fehler kann auch manchmal auftreten, wenn Sie eine Schleife haben und vergessen, ein Objekt während der Schleife zu löschen. Es kann jedoch nur manchmal auftreten und andere nicht - was einer der Gründe ist, warum dieser Fehler so ärgerlich sein kann.
Nehmen Sie zum Beispiel diesen Code unten:
1234567891011121314151617 | Unter InsertPicture()Dim i As Integershp als Objekt dimmenFür i = 1 bis 100Mit Arbeitsblättern("Blatt1")'Objektvariable setzenSet shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").Oben, Breite:=264, Höhe:=124)Ende mitMit shp.Object.PictureSizeMode = 3'Lade das Bild.Object.Picture = LoadPicture("C:\data\image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Ende mitAls nächstesEnd Sub |
Die Variable wird als Object deklariert und dann die EINSTELLEN Schlüsselwort wird verwendet, um dem Objekt ein Bild zuzuweisen. Das Objekt wird dann mit einem Bild gefüllt und in die Excel-Tabelle eingefügt, wobei gleichzeitig eine gewisse Formatierung stattfindet. Anschließend fügen wir dem Code eine Schleife hinzu, um 100 Bilder in das Excel-Blatt einzufügen. Gelegentlich führt dies zu einem Automatisierungsfehler, manchmal aber auch nicht – frustrierend, oder?
Die Lösung für dieses Problem besteht darin, die Objektvariable innerhalb der Schleife zu löschen, indem Sie das Objekt auf setzen NICHTS - Dadurch wird der Speicher freigegeben und der Fehler verhindert.
12345678910111213141516171819 | Unter InsertPicture()Dim i As Integershp als Objekt dimmenFür i = 1 bis 100Mit Arbeitsblättern("Blatt1")'Objektvariable setzenSet shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells( i, "A").Oben, Breite:=264, Höhe:=124)Ende mitMit shp.Object.PictureSizeMode = 3'Lade das Bild.Object.Picture = LoadPicture("C:\data\image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Ende mit'lösche die ObjektvariableSetze shp = NichtsAls nächstesEnd Sub |
DLL-Fehler und Aktualisierung von Windows
Manchmal tritt der Fehler auf und es gibt nichts, was im VBA-Code getan werden kann. Erneutes Registrieren von DLLs, die verwendet werden, um sicherzustellen, dass unser Windows auf dem neuesten Stand ist, und als letzten Ausweg, eine Registrierungsprüfung durchzuführen, da manchmal die einzigen Dinge sind, die diesen Fehler beheben können.
Eine gute Möglichkeit, diesen Fehler zu vermeiden, besteht darin, sicherzustellen, dass Fehlerfallen vorhanden sind Bei Fehler Gehe zu oder Bei Fehler Fortsetzen Weiter Routinen.