VLookup On Another Workbook
尝试创建一个宏,该宏将从单元格A7,A8,A9等那里获取输入(13位数字),直到到达空白单元格,然后针对另一个工作簿运行vlookup。
但是,我只是遇到#N / A错误,我无法弄清原因。
我当前的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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 \\',但这并没有真正改变任何内容。
谢谢。
首先,您应该更改src范围,该范围实际上设置为仅抓住最下面一行,而不是从上到下的范围。尝试
1 2 3 4 5 | 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对文本,通用和数字非常敏感,因此如果新的src范围无济于事,请尝试首先使用CStr()转换输入字符串。
祝你好运!
Set srcRange = src.Sheets(1).Range("A1:H1").End(xlDown)
这将在
在单个单元格上执行
您可能的意思是:
1 2 3 | With Sheets(1) Set srcRange = .Range("A1:H" & .Range("A1").End(xlDown).Row) End With |
这将设置为类似