【问题标题】:Unable to get the Vlookup property of the WorksheetFunction class (referring to different workbook)无法获取 WorksheetFunction 类的 Vlookup 属性(指不同的工作簿)
【发布时间】:2014-10-21 09:54:20
【问题描述】:

我想在 VBA 代码中使用 VLookup 从不同的工作簿 (Excel 2010 VBA) 中查找值。我在下面代码的最后一行收到上述错误:

Sub GetFundValues(Source As String, Target As String, wb As Workbook)
    Dim nIdx As Integer
    Dim SourceSheet As Worksheet
    Dim SourceFile As Workbook
    Dim s2 As String
    Dim s3 As String
    Dim rng As Range


    s2 = wb.Sheets(Target).Range("C2").Value

    Set SourceFile = Application.Workbooks.Open("D:\Mydocs\Finance\inv.xls")
    Set SourceSheet = SourceFile.Worksheets(Source)

    s3 = SourceSheet.Range("A3").Value
    Set rng = SourceSheet.Range("A3:A30")

    nIdx = 3

    With wb.Sheets(Target)
        While wb.Sheets(Target).Range("H" & nIdx).Value <> ""
            s2 = wb.Sheets(Target).Range("H" & nIdx).Value
            wb.Sheets(Target).Range("B" & nIdx).Value = Application.WorksheetFunction.VLookup(s2, rng, 3, False)

s2、s3 和 rng 变量的值设置正确(它们用于调试目的),并且 Vlookup 中的值列(第 3 列)包含有效值。

我想不出 VLookup 中的其他问题可能会导致此问题。有什么想法吗??

【问题讨论】:

  • 您已将 s2 声明为字符串,您是否正在查找数字?如果是这样,请尝试将 s2 声明为数值数据类型。
  • 查找搜索项为字符串,返回值为数字。那么想必这段代码就OK了?

标签: excel vba vlookup


【解决方案1】:

刚刚发现这个:

Set rng = SourceSheet.Range("A3:A30")

您正在查看的范围只有 1 列宽。当您尝试从第 3 列返回数据时,您的范围需要至少为 3 列宽:

Set rng = SourceSheet.Range("A3:C30")

【讨论】:

  • 噢!谢谢 - 这解释了它
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 2014-05-13
  • 2015-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多