我正在尝试使用excel VBA HLookup功能。我尝试过两种方法,都会产生错误。谁能解释一下我做错了什么?
首先尝试:
lookupValue = Worksheets(1).Name & "!A1"
tableArray = Worksheets(3).Name & "!$A$1:$" & Col_letter & "$1"
Worksheets("Comparison").Cells(1, 2).Value = "=HLookup(" & lookupValue _
& ";" & tableArray & ";1;FALSE)"
第二次尝试:
tda = Worksheets(1).Cells(1, 1).Value ' I also tried using tda without .Value
Table = Worksheets(3).Range(Cells(1, 1))
Worksheets("Comparison").Cells(1, 2).Value = WorksheetFunction. _
HLookup(tda, Table, 1, False)
答案 0 :(得分:2)
对于您的第一个,您需要使用美国区域设置,所以使用逗号分隔符,并且您应该将表单名称用单引号括起来,以防它们包含空格或看起来像特殊名称(例如日期):
lookupValue = "'" & Worksheets(1).Name & "'!A1"
tableArray = "'" & Worksheets(3).Name & "'!$A$1:$" & Col_letter & "$1"
Worksheets("Comparison").Cells(1, 2).Formula = "=HLookup(" & lookupValue _
& "," & tableArray & ",1,FALSE)"
,对于第二个,您必须为表参数使用范围对象:
tda = Worksheets(1).Cells(1, 1).Value ' I also tried using tda without .Value
Set Table = Worksheets(3).Range(Worksheets(3).Cells(1, 1), Worksheets(3).Cells(1, Col_letter))
Worksheets("Comparison").Cells(1, 2).Value = WorksheetFunction. _
HLookup(tda, Table, 1, False)
我假设Table被声明为Variant,Object或Range。
请注意,如果查找值不匹配,您仍会收到运行时错误。
答案 1 :(得分:1)
你正在做的事情通常是有效的,即创建一个包含你想要调用和输入它的函数的字符串。
我认为这不是最安全的方法,因为如果从使用不同语言的Excel运行该宏,它将无效。
从VBA调用调用Excel函数的正确方法是:例如:
cells(1,2) = Application.WorksheetFunction.VLookup(123,Range("A1:C100"),3,FALSE)
无论如何,如果您更愿意使用这种字符串方法,那么第一次尝试的问题就是
"=HLookup(" & lookupValue _
& ";" & tableArray & ";1;FALSE)"
产生字符串:
=HLookup(Sheet1!A1;Sheet3!$A$1:$B$1;1;FALSE)
请注意,您使用的是分号,而您应该使用分号。
第二次尝试中的问题是.Range
属性将字符串作为输入,所以你不能Range(Cells(1,1))
你应该做.Range("A1:A3")