VBA VLookup应该找到价值,但没有价值

时间:2019-03-05 09:29:59

标签: excel vba vlookup

我试图在VBA中使用VLookup,但我得到

  

“无法获取worksheetfunction类的VLookup属性”错误。

我在其他线程中读到这可能是因为找不到查找值。对于我的特定查找,将始终找到这些值,因此这不是问题。我还按升序对查找表进行了排序,因为这是另一个常见问题。 如果我在单元格中执行相同的vlookup,则可以正常工作

Sub VlookupIssues()

Dim lookUpValue As String
Dim result As Integer
Dim ws As Worksheet: Set ws = Sheets(3)
Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction

Sheet1.Activate
lookUpValue = Range("B1").Offset(2, 0).Value     'string "HR Manager"

Sheet3.Activate
result = wsFunc.VLookup(lookUpValue, ws.Range("A4:D42"), 3, False)

End sub

查找表看起来像这样(上面/下面有几行):

Lookup Table

2 个答案:

答案 0 :(得分:0)

Nathan的回复以及将结果变量从integer更改为double的技巧

您是否在Vlookup中尝试了整个范围,而不是像ws那样worksheets("Sheetname").range("a2:d42")

代替使用分配给工作表(3)set ws=worksheets("Sheetname")的ws – Nathan_Sav

答案 1 :(得分:0)

我设置了相同的文件,对我来说运行得很好。我正在运行Office 365。 暗示您的问题可能与您正在查找的文本字符串本身有关,例如可能没有注意到的额外空间? 此外,vlookup并不比使用索引和匹配函数(也不需要对任何内容进行排序)优雅。

也许尝试这样的事情:(当然,您需要对其进行剪裁,然后将结果放置在我为此行添加了一个变量的地方,该变量设置为5)

Sub NewVLU()

Dim lookUpValue As String
Dim lRow As Long
On Error Resume Next
lookUpValue = Worksheets("Sheet1").Range("B1").Offset(2, 0).Value
lRow = Application.WorksheetFunction.Match(lookUpValue, 
Workbooks("test.xlsm").Sheets("Sheet3").Range("B:B"), 0)
result = Workbooks("test.xlsm").Sheets("Sheet3").Range("D" & lRow).Value
nRow = 5
Workbooks("test.xlsm").Sheets("Sheet1").Range("H" & nRow).Value = result
End Sub