我是 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
反而。