Application.VLookup函数始终返回#N / A.

时间:2017-06-21 22:15:07

标签: vba excel-vba excel

我正在尝试使用Visual Basic中的Application.VLookup函数在不同的工作簿中查找值。但是,每当我使用它时,它总是返回#N / A.

这是我的功能布局。 LastRow()只返回最后一行的行号。 SHORTAGE_SBT是包含源工作簿名称的变量。 SBT_Last是SHORTAGE_SBT的最后一行。我在B栏中搜索的ID,因此我使用“B”&我可以参考它。

For ind = 4 To LastRow()
    Range("H" & ind).Select
    ActiveCell.Value = Application.VLookup("B" & ind, Workbooks(SHORTAGE_SBT).Sheets(1).Range("A14:DZ" & SBT_Last), Range("DZ1").Column, False)
Next

我已经尝试为VLookup录制一个宏,看看它是否有助于我理解这个问题。宏给了我这个函数,它有效但无法使用,因为它包含硬编码的文件名而不是使用变量。

Range("H" & ind).FormulaR1C1 = "=VLOOKUP(RC[-6],'[filename.xls]Sheet1'!R14C1:R2382C130, COLUMN(R[-3]C[122]), FALSE)"

除了使用更直接的引用之外,我看不出宏放置函数的参数而不是我的参数的方式之间有任何显着差异。我尝试在我的代码中使用直接数字,但这样做也没有帮助。

2 个答案:

答案 0 :(得分:1)

结合两种方法:

Range("H" & ind).FormulaR1C1 = _
            & "=VLOOKUP(RC[-6],'[" & Workbooks(SHORTAGE_SBT)  _
            & "]Sheet1'!R14C1:R2382C130, COLUMN(R[-3]C[122]), FALSE)"

答案 1 :(得分:1)

Application.VLookup("B" & ind, Workbooks(SHORTAGE_SBT).Sheets(1).Range("A14:DZ" & SBT_Last), Range("DZ1").Column, False)

"B" & ind将在字面上进行搜索;它不会被转换为范围地址,因为它在此处由 VBA 解释,而不是由 Excel 解释。尝试:

Application.VLookup(Range("B" & ind), Workbooks(SHORTAGE_SBT).Sheets(1).Range("A14:DZ" & SBT_Last),  Range("DZ1").Column, False)
'                   ^^^^^^^^^^^^^^^^