VLookup在另一本工作簿上

时间:2017-01-17 19:51:21

标签: vba excel-vba vlookup excel

尝试创建一个宏,它将从单元格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',但这并没有真正改变任何东西。

感谢。

2 个答案:

答案 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()转换输入字符串。

祝你好运!