2016-12-14 8 views
0

Ich versuche, den Zellenbereich zu markieren, wenn ein Datum in der Liste der Feiertage vorhanden ist. Beim Ausführen des folgenden Codes wird jedoch der Laufzeitfehler 1004 angezeigt. Ich habe sogar versucht, es in Error-Handler zu behandeln; aber es funktioniert nicht. Kann jemand mir bitte helfen, warum dieser Fehler auftritt und das gleiche löst?Laufzeitfehler 1004 bei Verwendung der Vlookup-Funktion

Sub highlight_cells() 
Dim myrange As Range 
On Error GoTo myerr: 
For i = 1 To 10 
Set myrange = Range(Cells(1, i), Cells(10, i)) 
temp = Application.WorksheetFunction.VLookup(Range(Cells(1, i)), [holidays], 2, False) 
If (Application.WorksheetFunction.IsNA(temp)) Then 
myrange.Interior.Color = 3 
End If 
Next i 

myerr: 
If Err.Number = 1004 Then 
MsgBox "vlookup error" 
End If 
End Sub 
+0

Was soll '[holidays]' sein? Ist es ein benannter Bereich? Ist das buchstäblich wie dein Code geschrieben ist? Ich nehme an, dass Ihr Fehler in der Zeile "temp = Application ...." auftritt. – BruceWayne

+0

Urlaub ist die benannte Liste. – Madhu

+0

Wäre es dann nicht nur Ferien? keine Klammern auf beiden Seiten?Es sei denn, Sie haben es wörtlich mit "[holidays]" (aber ich bin mir nicht sicher, ob Sie Klammern in einem benannten Bereich haben können) – BruceWayne

Antwort

0

Range(Cells(1, i)) ist keine gültige Bereichsbezug

vielleicht haben Sie Cells(1, i)

außerdem können Sie nutzen die ApplicationVLookup() Methode, hüllt den möglichen Fehler in der zurückgegebenen Variante Variable, die Sie können verweisen wollte überprüfen Sie mit IsError() Funktion wie folgt:

Dim temp As Variant 
For i = 1 To 10 
    Set myrange = Range(Cells(1, i), Cells(10, i)) 
    temp = Application.VLookup(Cells(1, i), [holidays], 2, False) 
    If Not IsError(temp) Then Cells(1, i).Interior.Color = 3 
Next i 
+0

Jetzt bekomme ich den Fehler nicht. Die Vlookup-Funktion selbst funktioniert jedoch nicht mehr richtig. Eigentlich möchte ich die Zellen hervorheben, wenn es in Vlookup eine Übereinstimmung gibt. Selbst wenn es 5 solche Daten gibt, hebt vlookup keine dieser Zellen hervor. Bitte beachten Sie, dass ich gerade die "Wenn nicht in" in meinem Code geändert habe. Wenn ich den Code wie angegeben verwendet habe, sind alle Zellen markiert, was bedeutet, dass jedes Mal, wenn vlookup einen Fehler zurückgibt. – Madhu

+0

Vielleicht möchten Sie einige Aufnahmen Ihrer Daten posten, um zu sehen, wo '[Ferien]' sind und welche Zellen gegen diesen Bereich geprüft werden sollen. – user3598756

+0

Ich denke, er muss nur 'Ferien' machen, nicht' [Ferien] '? Oder fehlt mir etwas? Aber ich stimme zu, es würde mir sehr helfen, einen Screenshot von "Ferien" zu sehen. Auch, @Madhu, ersetzen "[Feiertage]" mit dem tatsächlichen Bereich und überprüfen Sie, ob es funktioniert. Wenn es funktioniert, dann ist es ein Problem mit der Art, wie der Bereich benannt wird, nicht unbedingt die Formel/VBA. – BruceWayne

0

Hier ist eine bedingte Formatierungsmethode, ohne VBA zu verwenden. Wählen

Ihr Sortiment> Bedingte Formatierung> Neue Regel> Verwenden Sie eine Formel ...

Geben Sie diese Formel

=VLOOKUP($A2,$J$2:$K$6,1,FALSE) 

Vorsicht der "$" in der Formel. Dies sollte alle Zellen markieren, die in der Feiertagsliste gefunden wurden.

Conditional Formatting V lookup

+0

Danke für Ihre Hilfe. Ich wollte dies in VBA nicht durch Excel-Formel tun. – Madhu

0

Ihr Code in Ordnung ist, es funktioniert in Excel 2010, ist Ihr Problem mit VBA Fehlerbehandlungsverfahren.

Gehen Sie zu Extras -> Optionen -> Allgemein -> Fehler Trapping und überprüfen Sie "Break on unhanded Errors"

enter image description here

0

leider all diese Zeiten, die ich auf Spalte 2 in vlookup Bezug wurde . Das verursachte das Problem. Die Liste der Ferien ist eine einzelne Spaltenliste. Daher war vlookup Fehler werfen. Und noch eine Sache, die benannten Bereiche arbeiten, wie ich eingegeben habe, und sogar die tatsächliche Reichweite gibt auch das gleiche Ergebnis.

Sub highlight_cells() Dim myrange As Range

Für i = 1 bis 10

Set myrange = Range (Cells (1, i), Zellen (10, i)) MsgBox Zellen (1, i) temp = Application.VLookup (Cells (1, i), [Urlaub], 1, false) If Not IsError (temp) Dann myrange.Interior.ColorIndex = 3 End If

Weiter i

End Sub

Verwandte Themen