【发布时间】:2017-01-17 19:51:20
【问题描述】:
尝试创建一个宏,该宏将从单元格 A7、A8、A9 等输入(13 位数字)直到到达空白单元格,然后针对另一个工作簿运行 vlookup。
但是,我只是收到 #N/A 错误,我不知道为什么。
我当前的代码:
Sub getData()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlManual
Dim wb As Workbook, src As Workbook
Dim srcRange As Range
Dim InputString
Dim OutputString
Dim i As Long
Set wb = ActiveWorkbook
Set src = Workbooks.Open("D:\Files\test1.csv", True, True)
Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown)
i = 7
Do While wb.ActiveSheet.Cells(i, 1) <> ""
InputString = wb.Worksheets("Sheet 1").Cells(i, 1)
OutputString = Application.VLookup(InputString, srcRange, 3, False)
wb.Worksheets("Sheet 1").Cells(i, 2) = OutputString
i = i + 1
Loop
src.Close (False)
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub
我认为值得注意的是,我正在查找的引用(“InputString”)在“src”文件中定义为自定义格式 #0。不知道是不是太重要了,应该还是整数吧?
此外,“OutputString”可以是数字或文本,这就是为什么我故意让它未定义的原因。我尝试将其定义为“Variant”、“String”和“Integer”,但这并没有真正改变任何东西。
谢谢。
【问题讨论】:
-
您的
VLookup正在尝试访问您设置为只有一列宽的范围的第 3 列。可能将"A1:A8"更改为"A1:C8"? -
@YowE3K - 抱歉,这是我使用测试电子表格时的错误。我已经编辑更正。它现在确实将初始范围设置为第一行。
-
(a) 我假设您已经检查了活动工作表的 A 列中的单元格至少在您尝试在工作表“工作表 1”上处理的范围内是非空白的。 (例如,如果活动工作表在单元格 A7 中没有任何内容,则循环不会处理“工作表 1”的单元格 A7 中的任何内容,这可能会在“工作表 1”的单元格 B7 中留下“#N/A”来自之前运行的宏。) (b) 你有没有单步执行代码来查看
InputString的值被设置为多少? (c) 您是否检查过 csv 文件是否包含您要查找的值?