【问题标题】:Application.VLookup function always returns #N/AApplication.VLookup 函数总是返回 #N/A
【发布时间】:2017-06-22 06:26:03
【问题描述】:

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

这是我的函数的布局。 LastRow() 只返回最后一行的行号。 SHORTAGE_SBT 是一个包含源工作簿名称的变量。 SBT_Last 是 SHORTAGE_SBT 的最后一行。我在 B 列中搜索的 ID,因此我使用 "B" & ind 来引用它。

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)"

除了使用更直接的引用之外,我看不出宏布局函数参数的方式与我的方式有任何显着差异。我曾尝试在我的代码中使用直号,但这样做也无济于事。

【问题讨论】:

    标签: vba excel


    【解决方案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)
    '                   ^^^^^^^^^^^^^^^^
    

    【讨论】:

    • 把你搞砸的总是小事。非常感谢。
    【解决方案2】:

    结合这两种方法:

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

    【讨论】:

    • 不知道在 VBA 中可以使用多行语句。谢谢。
    • 我是新用户,所以我的点赞尚不可见。 ://
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2013-02-16
    • 2013-08-01
    • 2013-03-25
    • 2021-10-27
    相关资源
    最近更新 更多