Supportnet / Forum / Tabellenkalkulation
VLOOKUP - Abbruch bei #NV
Frage
Hallo liebes Forum,
habe ein Problem mit dem VLOOKUP in meinem Makro - ich gebe zu wohl ein "Grünschnabel-Problem" aber vielleicht kann dennoch jemand helfen:
Es liegt wohl daran, dass die Verweise mitunter nicht gültig sind (d.h. in der durchsuchten Tabelle sind nicht alle Suchrkriterien zu finden).
Das Makro spuckt den "Fehler 1004 - Anwendungs- oder Objektorientierter Fehler" aus.
Hier der Text:
Sub sverweis2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim iRow As Integer, iValue As Integer
iValue = 7000
Set ws1 = Sheets("Mittelabfluss_2007")
Set ws2 = Sheets("aktuell")
For iRow = 3 To 7000
ws1.Cells(iRow, 4).Value = _
WorksheetFunction.VLookup(ws1.Cells(iRow, 1).Value, ws2.Range("A2:C7000"), 2, False)
Next iRow
End Sub
_______________________________________
Weiß jemand, wie sich der Fehler abfangen und durch einen Standardwert (hier: 0) ersetzen lässt?
Vielen Dank im Voraus
Grüße Stefan
Antwort 1 von coros
Hallo Stefan,
setze vor der VLookup-Befehlszeile ein "On Error Resume Next" und danach ein "On Error GoTo 0". Damit wird bei Auftreten eines Fehlers dieser Übersprungen und danach wird die Fehlerbehandlung wieder eingeschaltet. Dein Makro sieht dann wie folgt aus:
Option Explicit
Ich hoffe, dass Du das so meintest. Bei fargen melde Dich wieder.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
setze vor der VLookup-Befehlszeile ein "On Error Resume Next" und danach ein "On Error GoTo 0". Damit wird bei Auftreten eines Fehlers dieser Übersprungen und danach wird die Fehlerbehandlung wieder eingeschaltet. Dein Makro sieht dann wie folgt aus:
Option Explicit
Sub sverweis2()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim iRow As Integer, iValue As Integer
iValue = 7000
Set ws1 = Sheets("Mittelabfluss_2007")
Set ws2 = Sheets("aktuell")
For iRow = 3 To 7000
On Error Resume Next
ws1.Cells(iRow, 4).Value = _
WorksheetFunction.VLookup(ws1.Cells(iRow, 1).Value, ws2.Range("A2:C7000"), 2, False)
On Error GoTo 0
Next iRow
End Sub
Ich hoffe, dass Du das so meintest. Bei fargen melde Dich wieder.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von tikobe
Hi Oliver,
vielen Dank für die Hilfe.
Dein Lösungsvorschlag hat im Grunde funktioniert, nur unerklärlicherweise nicht bei allen Fehlern. Habe mir jetzt wie folgt beholfen:
Sub Forecast_akutell()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim iRow As Integer, iValue As Integer
iValue = 7000
Set ws1 = Sheets("Mittelabfluss_2007")
Set ws2 = Sheets("aktuell")
For iRow = 3 To Range("A65536").End(xlUp).Row
On Error Resume Next
ws1.Cells(iRow, 4).Value = _
WorksheetFunction.VLookup(ws1.Cells(iRow, 1).Value, ws2.Range("A2:C7000"), 2, False)
If ws1.Cells(iRow, 4) = "" Then ws1.Cells(iRow, 4) = 0
Next iRow
End Sub
Damit funktioniert es :-)
Danke nochmal & viele Grüße Stefan
vielen Dank für die Hilfe.
Dein Lösungsvorschlag hat im Grunde funktioniert, nur unerklärlicherweise nicht bei allen Fehlern. Habe mir jetzt wie folgt beholfen:
Sub Forecast_akutell()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim iRow As Integer, iValue As Integer
iValue = 7000
Set ws1 = Sheets("Mittelabfluss_2007")
Set ws2 = Sheets("aktuell")
For iRow = 3 To Range("A65536").End(xlUp).Row
On Error Resume Next
ws1.Cells(iRow, 4).Value = _
WorksheetFunction.VLookup(ws1.Cells(iRow, 1).Value, ws2.Range("A2:C7000"), 2, False)
If ws1.Cells(iRow, 4) = "" Then ws1.Cells(iRow, 4) = 0
Next iRow
End Sub
Damit funktioniert es :-)
Danke nochmal & viele Grüße Stefan