VBA-Automatisierungsfehler

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Zakarya El Oirzadi

Last updated on August 4, 2023

In diesem Tutorial wird erklärt, was ein VBA-Automatisierungsfehler bedeutet und wie er auftritt.

Excel besteht aus Objekten, und zwar dem Workbook-Objekt, Worksheet-Objekt, Range-Objekt und Cell-Objekt, um nur einige zu nennen. Jedes Objekt hat mehrere Eigenschaften und Methoden, deren Verhalten mit VBA-Code gesteuert werden kann. Wenn der VBA-Code nicht korrekt programmiert ist, kann ein Automatisierungsfehler auftreten. Dies ist einer der frustrierendsten Fehler in VBA, da er oft ohne ersichtlichen Grund auftritt, obwohl Ihr Code völlig in Ordnung aussieht!

(Weitere Informationen zu VBA-Fehlern finden Sie in unserer Anleitung zur Fehlerbehandlung )

Verweis auf eine nicht mehr aktive Variable

Ein Automatisierungsfehler kann auftreten, wenn Sie über eine Variable, die nicht mehr aktiv ist, auf eine Arbeitsmappe oder ein Arbeitsblatt verweisen.

Sub AutomatisierungTesten()
    Dim strDatei As String
    Dim wb As Workbook
'Datei öffnen und Arbeitsmappenvariable festlegen
    strDatei = Application.GetOpenFilename
    Set wb = Workbooks.Open(strDatei)
'Arbeitsmappe schließen
    wb.Close
'Versuchen, die Arbeitsmappe zu aktivieren
    wb.Activate
End Sub

Wenn wir den obigen Code ausführen, erhalten wir einen Automatisierungsfehler. Das liegt daran, dass wir eine Arbeitsmappe geöffnet und ihr eine Variable zugewiesen haben. Dann haben wir 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.

VBA Automatisierungsfehler

Wenn wir eine Arbeitsmappe aktivieren wollen, müssen wir sie zuerst öffnen!

Speicherüberlastung

Dieser Fehler kann auch auftreten, wenn Sie eine Schleife haben und vergessen, ein Objekt im Laufe der Schleife zu löschen. Es kann jedoch sein, dass er nur manchmal auftritt und in anderen Fällen nicht. Das ist einer der Gründe, warum dieser Fehler so ärgerlich sein kann.

Nehmen Sie zum Beispiel den folgenden Code:

Sub BildEinfuegen()
    Dim i As Integer
    Dim shp As Object
    For i = 1 To 100
       With Worksheets("Tabelle1")
'Die Objektvariable festlegen
          Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
       End With
       With shp
          .Object.PictureSizeMode = 3
'Das Bild laden
          .Object.Picture = LoadPicture("C:dataimage" & i & ".jpg")
          .Object.BorderStyle = 0
          .Object.BackStyle = 0
       End With
    Next i
End Sub

Die Variable wird als Objekt deklariert und dann wird das Schlüsselwort SET verwendet, um dem Objekt ein Bild zuzuweisen. Das Objekt wird dann mit einem Bild belegt und in das Excel-Blatt eingefügt, wobei einige Formatierungen gleichzeitig vorgenommen werden. Wir fügen dann eine Schleife in den Code ein, 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 das Objekt auf NOTHING gesetzt wird. Auf diese Weise wird der Speicher freigegeben und der Fehler vermieden.

 Sub BildEinfuegen()
 Dim i As Integer
 Dim shp As Object
 For i = 1 To 100
 With Worksheets("Tabelle1")
'Die Objektvariable festlegen
 Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
 End With
 With shp
.Object.PictureSizeMode = 3
'Das Bild laden
.Object.Picture = LoadPicture("C:dataimage.jpg")
.Object.BorderStyle = 0
.Object.BackStyle = 0
 End With
'Die Objektvariable löschen
 Set shp = Nothing
 Next i
End Sub

DLL-Fehler und Aktualisierung von Windows

Manchmal tritt der Fehler auf und es gibt nichts, was innerhalb des VBA-Codes getan werden kann. Die Neuregistrierung der verwendeten DLLs, die Überprüfung, ob Windows auf dem neuesten Stand ist, und als letzter Ausweg die Durchführung einer Registrierungsprüfung sind manchmal die einzigen Maßnahmen, die diesen Fehler beheben können.

Eine gute Möglichkeit, diesen Fehler zu vermeiden, besteht darin, dafür zu sorgen, dass mit den Routinen On Error Go To oder On Error Resume Next Fehler abgefangen werden.

vba-free-addin

Add-In für VBA-Code-Beispiele

Auf alle Code-Beispiele aus unserer Website einfach zugreifen.

Navigieren Sie einfach zum Menü, klicken Sie darauf und der Code wird direkt in Ihr Modul eingefügt. .xlam add-in.

(Keine Installation erforderlich!)

Kostenloser Download

Return to VBA Code Examples