
Ich bin neu bei VBA und habe versucht, Code zu schreiben, um mit nach 5 Namen (in Blatt2) zu suchen, wobei Blatt1 nur wenige Namen enthält For Loop
.
Aber während dieser ausgeführt wird, gibt der Code einen Fehler aus,
Objektvariable oder With-Blockvariable nicht festgelegt
Wie werde ich es los?
Sub find()
Sheets("sheet2").Activate
For x = 1 To 5
Cells(x, 1).Select
var1 = Selection.Copy
Sheets("sheet1").Activate
Dim search As Range
Set search = range("a1:f9").find(var1).Activate
Next
End Sub
Antwort1
Sie können diesen geänderten VBA-Code verwenden, um Namen zwischen zwei Blättern abzugleichen und zurückzugeben.
Vor dem RUN-Makro:
Sub QuickSearch()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim rng1 As Range
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
Set rng1 = ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
With rng1.Offset(0, 1)
.FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-1],Sheet10!C[-1]:C,1,FALSE),"""")"
.Value = .Value
End With
End Sub
- Sie können diesen Code bei jedem beliebigen Blatt als Standardmodul eingeben.
Nach RUN-Makro:
Achtung
ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
- In dieser Codezeile können
[a2]
(Zellreferenz) und"A"
(Spaltenname) bearbeitet werden.
Antwort2
Selection.Copy
ist einObjekt, also der Befehl
var1 = Selection.Copy
verursacht Ihren Fehler - es muss sein
Set var1 = Selection.Copy
Aber es ist nicht das, was Sie wollten – Sie wolltender Inhalt (Text) der Auswahl in Ihrer Variablevar1
.
Verwenden Sie also
var1 = Selection.Text
stattdessen.