Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VLookUp- Laufzeitfehler 1004

Forumthread: VLookUp- Laufzeitfehler 1004

VLookUp- Laufzeitfehler 1004
26.03.2016 14:53:39
Jassi

Hallo zusammen,
ich arbeite erst seit 2 Wochen mit VBA und habe bisher alle kleineren Problemchen selbstständig gelöst. Leider stoße ich seit 3 Tagen an meine Grenzen.
Ich habe ein VLookUp-Funktion benutzt um Daten von einem Tabellenblatt in eine anderes zu laden. Dabei erhalte ich jedoch, egal wie ich es drehe und wende, den Laufzeitfehler 1004.
Hier mein Sub:

Sub Sonnenuntergang_Sonnenaufgang()
Dim i As Integer
Dim SU As Variant
Dim letzteZeile As Integer
Worksheets(5).Range(Cells(2, 1), Cells(letzteZeile, 1)).NumberFormat = "DD.MM.YYYY"
Worksheets(4).Range(Cells(2, 1), Cells(letzteZeile, 1)).NumberFormat = "DD.MM.YYYY"
letzteZeile = Worksheets(5).Cells(Rows.Count, 1).End(xlUp).Row
SU = Worksheets(5).Range(Cells(2, 1), Cells(letzteZeile, 6))
For i = 2 To letzteZeile
Cells(i, 11) = Application.VLookup(Range(Cells(i, 1), Cells(letzteZeile, 1)), SU, 5, False)
Next i
End Sub
Ich hoffe, dass mir hier jemand helfen kann oder einen Tipp erhalte mit dem ich weiterarbeiten kann.
Vielen Dank schonmal im Voraus!!!
Viele Grüße,
Jasmin

Anzeige

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VLookUp- Laufzeitfehler 1004
26.03.2016 15:01:46
RPP63
Moin!
Es gibt kein Application.VLookup,
sondern nur die WorksheetFunction.VLookup
Gruß Ralf

AW: VLookUp- Laufzeitfehler 1004
26.03.2016 15:07:29
Jassi
Hey,
Danke für die Antwort.
Das hatte ich die ganze Zeit auch so stehen, aber damit funktioniert die ganze Sache leider auch nicht.
VG

falsche Reihenfolge!
26.03.2016 15:21:18
RPP63
Die VBA-Hilfe sagt:
WorksheetFunction.VLookup(Suchkriterium, Suchmatrix, Spalte, Bereich_Verweis)
Du hast die ersten beiden Argumente vertauscht.
Gruß Ralf

Anzeige
AW: falsche Reihenfolge!
26.03.2016 15:24:25
Jassi
Hallo Ralf,
leider ist es das auch nicht.
Die Reihenfolge ist richtig. Es soll nach den Zellen in Spalte 1 im Tabellenblatt 5 suchen.
Gruß,
Jasmin

Wenn Du meinst …
26.03.2016 15:30:26
RPP63
In Deiner Klammer steht erst ein Range, dann SU
Richtig wäre anders herum.
Bin raus.
Frohe Ostern wünscht Ralf

Anzeige
Achtung!
26.03.2016 15:34:27
RPP63
Dein Suchbereich besteht ja nur aus einer Spalte.
In diesem Bereich kann natürlich nicht nach der fünften Spalte gesucht werden, weil es die nicht gibt!
Mache Dich mal mit dem SVerweis vertraut.
Gruß Ralf

welchen Wert hat denn letzteZeile
26.03.2016 15:34:51
Matthias L
Hallo
Vermutlich 0 ?
Gruß Matthias

AW: welchen Wert hat denn letzteZeile
26.03.2016 15:38:01
Jassi
Hallo Matthias,
letzteZeile hat den Wert 8760.
Gruß,
Jasmin

Anzeige
Nochmal:
26.03.2016 15:42:10
RPP63
Dein Suchbereich hat nur eine Spalte!
In einem einspalten Bereich kann man sich schwerlich den Wert der fünften Spalte ausgeben lassen.
Meine Anmerkung bzgl. der Reihenfolge der Argumente gilt weiterhin.
Bei einem so großen Bereich solltest Du zudem den Bereich en bloc mit der Formel beschreiben und die Formel gegen den Wert tauschen.
Dann wird die Berechnung nur einmal angestoßen.
(Oder Du berechnest innerhalb eines Arrays)
Gruß Ralf

Anzeige
AW: Nochmal:
26.03.2016 15:50:57
Jassi
@Ralf, ich weiß gerade ehrlich gesagt nicht was du meinst.
Das Suchkriterium ist eine Spalte... VBA soll mir für jede Zeile dieser Spalte einen Wert ausspucken.
SU ist auch ein Range. Dieser geht in Worksheet(5) von Spalte 1 bis Spalte 6. Hier soll mir die 5. Spalte wieder gegeben werden.
Danke und Gruß,
Jasmin

Anzeige
Aufgedröselt:
26.03.2016 15:57:24
RPP63
Deine Codezeile:
Cells(i, 11) = Application.VLookup(Range(Cells(i, 1), Cells(letzteZeile, 1)), SU, 5, False)
ändere ich erst mal in die richtige Reihenfolge unter Verwendung von WorksheetFunction
Cells(i, 11) = WorksheetFunction.VLookup(SU, Range(Cells(i, 1), Cells(letzteZeile, 1)), 5, False)
Dein Bereich besteht nur aus einer Spalte:
Range(Cells(i, 1)), Cells(letzteZeile, 1))
Wie willst Du da den Wert der nicht vorhandenen fünften Spalte übergeben???
Richtig ist einzig:
Cells(i, 11) = WorksheetFunction.VLookup(SU, Range(Cells(i, 1), Cells(letzteZeile, 5)), 5, False)
Gruß Ralf

Anzeige
letzteZeile = 0
26.03.2016 16:08:36
Matthias L
Hallo
Du willst LetzteZeile schon benutzen, obwohl noch kein Wert in der Variable steht
Userbild
letzteZeile = Worksheets(5).Cells(Rows.Count, 1).End(xlUp).Row
Diese Zeile muss aber unter die Deklaration
Sub Sonnenuntergang_Sonnenaufgang()
Dim i As Integer
Dim SU As Variant
Dim letzteZeile As Integer
letzteZeile = Worksheets(5).Cells(Rows.Count, 1).End(xlUp).Row
Worksheets(5).Range(Cells(2, 1), Cells(letzteZeile, 1)).NumberFormat = "DD.MM.YYYY"
Worksheets(4).Range(Cells(2, 1), Cells(letzteZeile, 1)).NumberFormat = "DD.MM.YYYY"
Gruß Matthias

Anzeige
AW: letzteZeile = 0
27.03.2016 11:56:17
Jassi
Hallo Matthias,
ja sorry das letzteZeile muss natürlich davor stehen. Mein Fehler.
Funktioniert aber trotzdem nicht.
Könnte es eventuell auch an den Datumformat des Suchkriteriums und der Matrix liegen?
Frohe Ostern und Grüße,
Jasmin

probier das .NumberFormat = "DD/MM/YYYY"
27.03.2016 12:08:50
Matthias L
Hallo
Habe jetzt keine Zeit mehr, sorry.
Gruß Matthias

Anzeige
AW: letzteZeile = 0
27.03.2016 14:21:48
Jassi
Hallo Matthias,
ja sorry das letzteZeile muss natürlich davor stehen. Mein Fehler.
Funktioniert aber trotzdem nicht.
Könnte es eventuell auch an den Datumformat des Suchkriteriums und der Matrix liegen?
Frohe Ostern und Grüße,
Jasmin

Alle bisherigen Vermutungen unzutreffend, ...
26.03.2016 18:23:49
Luc:-?
…Folks; :-]
ich gehe mal davon aus, dass Jasmin das schon richtig argumentiert, nur eben leider wie eine ZellFml-Fkt in einer MatrixFml, was hier aber nicht fktioniert!
1. Jede Fkt, die im Container WorksheetFunction enthalten ist, sollte auch nur als objektbildende Eigenschaft von Application fktionieren, wird nur nicht vom VBE-Intellisense unterstützt.
2. SU enthält eine ausreichende SpaltenZahl.
3. letzteZeile wird zuvor belegt.
4. Entscheidend: Eine WorksheetFunction fktioniert nur so, wie sie auch pgmmiert wurde - die Unterstützung durch die Xl-Steuerung entfällt. Deshalb muss ein skalares Element auch stets skalar angegeben wdn.
Das ist in deinem Konstrukt nicht der Fall, Jasmin,
was aber womöglich nur ein Versehen deinerseits ist, weil ja sonst der ganze Zyklus nicht erforderlich wäre. Die Zeile muss also richtig eher wie folgt lauten:
Cells(i, 11) = Application.VLookup(Cells(i, 1), SU, 5, False)
Feedback nicht unerwünscht! Gruß + FrOst, Luc :-?
Besser informiert mit …

Anzeige
AW:
26.03.2016 20:54:47
Gerd L
3. letzteZeile wird zuvor belegt,
aber erst nach der ersten Verwendung dieser Variable im eingangs gezeigten Code, Folker:-)
Gruß Gerd

Na und! Steht doch noch vor SU-Belegung! owT
26.03.2016 22:34:13
Luc:-?
:-?

Ich hatte mich auf die Fml konzentriert, ...
27.03.2016 13:05:55
Luc:-?
…denn darum ging's primär, Gerd,
ihren anderen dummen Fehler hatte ich deshalb nicht bemerkt, denn da ist ja dann schon Schluss.
Luc :-?

Anzeige
AW: Alle bisherigen Vermutungen unzutreffend, ...
27.03.2016 10:54:08
Jassi
Zuerst einmal danke für die ganzen Rückmeldung!!:)
Leider funktioniert mein Sub immernoch nicht.
@Luc: dein Lösungsvorschlag habe ich auch ausprobiert und erscheint mir auch schlüssig. Leider bekomme ich dann immer noch Fehler. "Anwendungs- oder objektdefinierter Fehler"
PS: Die Deklarierung der letzteZeile mache ich die ganze Zeit schon so und funktioniert auch bei allen anderen Subs wunderbar.
LG Jasmin

Anzeige
VLookUp auf Worksheet
27.03.2016 19:51:42
Michael
Hi zusammen,
der 1004 kommt doch immer, wenn die Bezüge nicht richtig gesetzt sind...
Ich hab's jetzt mal "ganz sauber" kodiert ...
Option Explicit
Sub Sonnenuntergang_Sonnenaufgang()
Dim i&, lZ4&, lZ5&   ' & = "as long"
Dim sh4 As Worksheet, sh5 As Worksheet
Dim SU As Range ' !!! ****************
Set sh4 = Worksheets(4)
Set sh5 = Worksheets(5)
lZ4 = sh4.Cells(sh4.Rows.Count, 1).End(xlUp).Row
lZ5 = sh5.Cells(sh5.Rows.Count, 1).End(xlUp).Row
sh4.Range("A1:A" & lZ4).NumberFormat = "DD.MM.YYYY"
sh5.Range("A1:A" & lZ5).NumberFormat = "DD.MM.YYYY"
Set SU = sh5.Range("A2:F" & lZ5)
For i = 2 To lZ4
sh4.Cells(i, 11) = Application.VLookup(sh4.Cells(i, 1), SU, 5, False)
Next i
End Sub
... mit ZWEI "letzten Zeilen" für *jedes* Blatt, mit SU als Range statt als Variant/Array, Luc:-?s Hinweis Nr. 4 usw., und es scheint zu tun, zumindest so, wie ich die Frage verstanden habe.
Die Datei: https://www.herber.de/bbs/user/104624.xls
Schöne Grüße,
Michael

Anzeige
AW: VLookUp auf Worksheet
28.03.2016 16:22:27
Jassi
Hallo Michael,
DANKE!!
Ja genau das lag an dem Range...
Dachte ich kein en Range auch über Range(Cells(x,y),Cells(x,y)) definieren aber scheinbar geht das nicht!!
Schöne Rest-Ostern noch
Jasmin

AW: VLookUp auf Worksheet
28.03.2016 17:15:12
Michael
Hi Jassi,
doch, das geht schon, aber es muß *überall* die Referenz auf das beteiligte Blatt drinstehen, ob wie hier sh4.Cells(i, 1) oder eben:
statt: Range(Cells(x,y),Cells(x,y))
dann: Blatt.Range(Blatt.Cells(x,y),Blatt.Cells(x,y))
Aber in diesem Fall geht halt nur EINE Zelle, siehe Antwort 4 von Luc:-?
Schöne Grüße zurück,
Michael

Anzeige
;
Anzeige

Infobox / Tutorial

VLOOKUP und der Laufzeitfehler 1004 in VBA


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler 1004 beim Einsatz von VLOOKUP in VBA zu beheben, folge diesen Schritten:

  1. Deklariere die Variablen:

    Dim i As Integer
    Dim SU As Range
    Dim letzteZeile As Integer
  2. Bestimme die letzte Zeile: Setze die Variable letzteZeile vor der Nutzung.

    letzteZeile = Worksheets(5).Cells(Rows.Count, 1).End(xlUp).Row
  3. Setze den Bereich für die VLOOKUP-Funktion: Stelle sicher, dass SU den richtigen Bereich enthält:

    Set SU = Worksheets(5).Range(Cells(2, 1), Cells(letzteZeile, 6))
  4. Führe die VLOOKUP-Operation aus: Achte darauf, die Argumente in der richtigen Reihenfolge anzugeben:

    For i = 2 To letzteZeile
       Cells(i, 11) = Application.WorksheetFunction.VLookup(Cells(i, 1), SU, 5, False)
    Next i

Häufige Fehler und Lösungen

  • Falsche Reihenfolge der Argumente: Stelle sicher, dass das Suchkriterium zuerst und der Suchbereich danach kommt.
  • Suchbereich hat nicht genug Spalten: Wenn Du versuchst, auf die fünfte Spalte zuzugreifen, muss der Suchbereich mindestens fünf Spalten umfassen.
  • Letzte Zeile nicht korrekt: Überprüfe, ob letzteZeile korrekt gesetzt ist, bevor Du sie verwendest.

Alternative Methoden

Falls Du weiterhin Probleme mit Application.WorksheetFunction.VLookup hast, kannst Du folgende Alternativen ausprobieren:

  1. SVERWEIS: In Excel-Formeln kann SVERWEIS eine ähnliche Funktionalität bieten, wenn Du mit Arrays arbeitest.
  2. Arrays verwenden: Lade die Daten in ein Array und bearbeite sie dort, bevor Du sie in die Zellen schreibst.

Praktische Beispiele

Hier ein funktionierendes Beispiel für den VBA-Code:

Sub Sonnenuntergang_Sonnenaufgang()
    Dim i As Integer
    Dim SU As Range
    Dim letzteZeile As Integer

    letzteZeile = Worksheets(5).Cells(Rows.Count, 1).End(xlUp).Row
    Set SU = Worksheets(5).Range(Cells(2, 1), Cells(letzteZeile, 6))

    For i = 2 To letzteZeile
        Cells(i, 11) = Application.WorksheetFunction.VLookup(Cells(i, 1), SU, 5, False)
    Next i
End Sub

Tipps für Profis

  • Vermeide die Verwendung von Application.VLookup: Nutze stattdessen Application.WorksheetFunction.VLookup, um Laufzeitfehler 1004 zu vermeiden.
  • Referenzen klar setzen: Benutze stets die vollständige Referenz für Zellwerte (z.B. sh4.Cells(i, 1)), um Mehrdeutigkeiten zu vermeiden.
  • Fehlermeldungen abfangen: Implementiere Fehlerbehandlungsroutinen, um den Code robuster zu machen.

FAQ: Häufige Fragen

1. Was bedeutet der Laufzeitfehler 1004?
Der Laufzeitfehler 1004 tritt auf, wenn eine Funktion in VBA nicht korrekt aufgerufen wird oder auf nicht vorhandene Objekte zugreift.

2. Wie kann ich den Fehler 1004 in VBA vlookup beheben?
Überprüfe die Reihenfolge der Argumente, die Größe des Suchbereichs und stelle sicher, dass die letzte Zeile vor ihrer Verwendung korrekt gesetzt ist.

3. Was ist der Unterschied zwischen Application.VLookup und Application.WorksheetFunction.VLookup?
Application.WorksheetFunction.VLookup ist der richtige Weg, um VLOOKUP in VBA zu verwenden, da es die Funktionsweise der Excel-Formel emuliert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige