Microsoft Excel – VBA

Microsoft Excel – VBA

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:

Bildbeschreibung hier eingeben

   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:

Bildbeschreibung hier eingeben

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.Copyist 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.

verwandte Informationen