In diesem Tutorial wird der VBA-Fehler 1004-anwendungsdefinierter oder objektdefinierter Fehler erläutert.
Der VBA-Laufzeitfehler 1004 ist als anwendungsdefinierter oder objektdefinierter Fehler bekannt, der auftritt, während der Code ausgeführt wird. Das Erstellen von Codierungsfehlern (siehe unseren Leitfaden zur Fehlerbehandlung) ist ein wesentlicher Bestandteil des Erlernens von VBA, aber zu wissen, warum ein Fehler auftritt, hilft Ihnen, Fehler bei der zukünftigen Codierung zu vermeiden.
VBA-Fehler 1004 - Objekt existiert nicht
Wenn wir in unserem Code auf ein Objekt verweisen, z. B. auf einen nicht definierten Bereichsnamen, kann dieser Fehler auftreten, da der VBA-Code den Namen nicht finden kann.
12345678 | Unter CopyRange()Dim CopyFrom As RangeCopyTo als Bereich dimmenSet CopyFrom = Sheets(1).Range("CopyFrom")Set CopyTo = Sheets(1).Range("CopyTo")CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesEnd Sub |
Das obige Beispiel kopiert die Werte aus dem benannten Bereich „CopyFrom“ in den benannten Bereich „CopyTo“ - natürlich unter der Bedingung, dass es sich um existierende benannte Bereiche handelt! Wenn sie nicht vorhanden sind, wird der Fehler 1004 angezeigt.
Die einfachste Möglichkeit, diesen Fehler im obigen Beispiel zu vermeiden, besteht darin, die Bereichsnamen in der Excel-Arbeitsmappe zu erstellen oder auf den Bereich im traditionellen Zeilen- und Spaltenformat zu verweisen, z. Bereich("A1:A10").
VBA-Fehler 1004 - Name bereits vergeben
Der Fehler kann auch auftreten, wenn Sie versuchen, ein Objekt in ein bereits vorhandenes Objekt umzubenennen - zum Beispiel wenn wir versuchen, Sheet1 umzubenennen, aber der Name, den Sie dem Sheet geben, bereits der Name eines anderen Sheets ist.
123 | UnternameWorksheet()ActiveSheet.Name = "Sheet2"End Sub |
Wenn wir bereits ein Sheet2 haben, tritt der Fehler auf.
VBA-Fehler 1004 - falscher Verweis auf ein Objekt
Der Fehler kann auch auftreten, wenn Sie in Ihrem Code falsch auf ein Objekt verwiesen haben. Zum Beispiel:
12345678 | Unter CopyRange()Dim CopyFrom As RangeCopyTo als Bereich dimmenSet CopyFrom = Range("A1:A10")Set CopyTo = Range("C1:C10")Bereich(CopyFrom).CopyRange(CopyTo).PasteSpecial xlPasteValuesEnd Sub |
Dies wird uns erneut den Fehler 10004 geben
Korrigieren Sie den Code und der Fehler wird nicht mehr angezeigt.
12345678 | Unter CopyRange()Dim CopyFrom As RangeCopyTo als Bereich dimmenSet CopyFrom = Range("A1:A10")Set CopyTo = Range("C1:C10")CopyFrom.CopyCopyTo.PasteSpecial xlPasteValuesEnd Sub |
VBA-Fehler 1004 - Objekt nicht gefunden
Dieser Fehler kann auch auftreten, wenn wir versuchen, eine Arbeitsmappe zu öffnen und die Arbeitsmappe nicht gefunden wird – die Arbeitsmappe in diesem Fall ist das nicht gefundene Objekt.
1234 | Unter OpenFile()Dim wb als ArbeitsmappeSet wb = Workbooks.Open("C:\Data\TestFile.xlsx")End Sub |
Obwohl die Meldung im Fehlerfeld anders aussieht, lautet der Fehler immer noch 1004.