关于vba:VLookup在另一本工作簿上

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)

这将在A列(即A20)上为您提供一个单元格的范围。
在单个单元格上执行VLookup是没有意义的。

您可能的意思是:

1
2
3
With Sheets(1)
    Set srcRange = .Range("A1:H" & .Range("A1").End(xlDown).Row)
End With

这将设置为类似A1:H20的内容。