尝试创建一个宏,它将从单元格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',但这并没有真正改变任何东西。
感谢。
答案 0 :(得分:1)
Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown)
这将为您提供一列单个单元格,位于A
列,即A20
。
在单个单元格上执行VLookup
是没有意义的。
你可能的意思是:
With Sheets(1)
Set srcRange = .Range("A1:H" & .Range("A1").End(xlDown).Row)
End With
这将设置为A1:H20
。
答案 1 :(得分:1)
首先你应该改变你的src范围,它实际设置为只抓取底行,而不是从上到下的范围。尝试
Set wb = ActiveWorkbook
Set src = Workbooks.Open(""D:\Files\test1.csv", True, True)
With src.Sheets(1)
Set srcRange = .Range(.Range("A1"), .Range("H1").End(xlDown))
End With
其次,我不相信CSV文件会支持13位数字,除非是文本。 VLOOKUP对文本与一般vs数量非常敏感,因此如果新的src范围无效,请尝试首先使用CStr()转换输入字符串。
祝你好运!