无论如何我不是VBA专家,但我知道基本要做 . 我正在编写一个脚本来帮助当地的动物收容所 . 他们手动将四张纸合并为一份报告 . 所有四个报告都包含一个公共变量,我将其命名为AnimalID . 目的是在狂犬病更新表上找到AnimalID,并将截止日期返回到报告表(209个实例,以Count递增) . 我已复制下面其中一个选项的代码 . 当我尝试运行脚本时,我收到以下错误(通过msgbox Err.Description):
错误:“对象'WorksheetFunction'的方法'VLookup'失败”
AnimalID位于狂犬病更新表的第一列和报告的第Q列 . 狂犬病更新表上的K列包含到期日期,应该复制到报告的P列 . 我已经尝试将AnimalID格式化为文本和数字,但没有成功 .
Dim Count As Long
Dim AnimalID, Renewal As Range
Worksheets("Report").Activate
Range("Q:Q").NumberFormat = "@"
Worksheets("Rabies Renewal").Activate
Range("A:A").NumberFormat = "@"
Worksheets("Rabies Renewal").Activate
Set Renewal = Sheets("Rabies Renewal").Range("A:AO")
Worksheets("Report").Activate
Range("Q8").Select
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Count = Selection.Count
For Count = 1 To Count
AnimalID = "Q" & Count + 7
Range("P" & Count + 7).Select
ActiveCell.Value = WorksheetFunction.VLookup(AnimalID, Renewal, 11, False)
Next Count
我还尝试了一些语法变体,包括查找值为Range(AnimalID).Value;将函数定义为Application.WorksheetFunction.VLookup;表数组作为范围;和rangelookup同时为true和false . 任何建议将不胜感激 . 谢谢您的帮助!
2 回答
你需要
Se
t Range object,而不仅仅是连接一个看起来像单元格地址的字符串 . 但是,您可以使用该连接字符串来帮助定义Range对象 .这将在For ...Next Statement的第一次传递时将
AnimalID
设置为 Report 工作表的Q8单元格,并且每次后续传递都会进一步向下移动单元格 .这是对您的程序的更广泛的重写,无需使用
.Select
和.Activate
命令¹ .¹请参阅如何避免在Excel VBA宏中使用选择以获取更多方法,以避免依赖选择和激活来实现目标 .
这是查找失败的预期结果 . 如果在工作表中有一个VLOOKUP()公式,如:
您收到#N / A错误,因为小表中不存在 11 .
如果你在VBA中运行相同的东西:
#N / A没有通过,相反我们看到: