我试图在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
查找表看起来像这样(上面/下面有几行):
答案 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