微软 Excel - VBA

微软 Excel - VBA

我是 VBA 新手,正在尝试编写代码来搜索 5 个名称(在 Sheet2 中),在 Sheet1 中只有几个名称,使用For Loop

但是在运行这个的时候,代码给出了错误,

未设置对象变量或块变量

我该如何摆脱它?

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

答案1

您可以使用此修改后的 VBA 代码,帮助您匹配和返回两个工作表之间的名称。

运行宏之前:

在此处输入图片描述

   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
  • 您可以将此代码与任何工作表一起输入作为标准模块。

运行宏后:

在此处输入图片描述

注意:

ws2.Range(ws2.[a2], ws2.Cells(Rows.Count, "A").End(xlUp))
  • 在此代码中,行[a2](单元格引用)和"A"(列名)是可编辑的。

答案2

Selection.Copy是一个目的,因此命令

var1 = Selection.Copy

产生错误 - 它必须是

Set var1 = Selection.Copy

但这不是你想要的——你想要的变量中选择的内容(文本)var1

因此使用

var1 = Selection.Text

反而。

相关内容