Excel 在VBA中将变量传递到VLOOKUP
我有以下代码:Excel 在VBA中将变量传递到VLOOKUP,excel,vba,Excel,Vba,我有以下代码: currName = "string" 'unused cellNum = [VLOOKUP("string", '2012'!A:M, 13, FALSE)] 但是我需要用VBA中名为currName的变量替换“string”。我试过这个: currName = "string" 'used cellNum = [VLOOKUP(currName, '2012'!A:M, 13, FALSE)] 适当的语法是什么?当我尝试使用变量的第二部分时,我得到的问题是它返回了无效数据
currName = "string" 'unused
cellNum = [VLOOKUP("string", '2012'!A:M, 13, FALSE)]
但是我需要用VBA中名为currName
的变量替换“string”
。我试过这个:
currName = "string" 'used
cellNum = [VLOOKUP(currName, '2012'!A:M, 13, FALSE)]
适当的语法是什么?当我尝试使用变量的第二部分时,我得到的问题是它返回了无效数据(例如,如果我将其输入到单元格中,它是
#NAME?
)currName
仅等于“字符串”。在第一个示例中,它在不使用变量的情况下工作正常。使用Evaluate
函数。公式本身就是一个字符串,因此必须将所有内容连接到一个字符串中:
cellNum = Evaluate("VLOOKUP(""" & currName & """, '2012'!A:M, 13, FALSE)")
使用
评估
功能。公式本身就是一个字符串,因此必须将所有内容连接到一个字符串中:
cellNum = Evaluate("VLOOKUP(""" & currName & """, '2012'!A:M, 13, FALSE)")
我以前从未见过方括号以这种方式使用。通常,这些是
范围
对象的快捷方式。我可以复制您的错误条件
你可以用这样的东西来代替。对cellNum的两个赋值都不会出错:
Sub Test2()
Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim cellNum As Range
Dim currName As String
currName = "string" 'unused
Set cellNum = ActiveCell
cellNum = wsFunc.VLookup("string", rngLook, 2, False)
cellNum = wsFunc.VLookup(currName, rngLook, 2, False)
End Sub
我以前从未见过方括号以这种方式使用。通常,这些是
范围
对象的快捷方式。我可以复制您的错误条件
你可以用这样的东西来代替。对cellNum的两个赋值都不会出错:
Sub Test2()
Dim wsFunc As WorksheetFunction: Set wsFunc = Application.WorksheetFunction
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim cellNum As Range
Dim currName As String
currName = "string" 'unused
Set cellNum = ActiveCell
cellNum = wsFunc.VLookup("string", rngLook, 2, False)
cellNum = wsFunc.VLookup(currName, rngLook, 2, False)
End Sub
代码的其余部分在哪里?如果不了解变量是如何声明的,就很难找出可能的错误(我能想到3或4件事),等等;这并不复杂,只是一个作业。请参阅下面我的答案,并阅读@Douglancy的注释,以了解在函数中不使用字符串文字时方法失败的原因。您有机会尝试下面我的答案吗?其余代码在哪里?如果不了解变量是如何声明的,就很难找出可能的错误(我能想到3或4件事),等等;这并不复杂,只是一个赋值。请参阅下面我的答案,并阅读@Douglancy的注释,以了解在函数中不使用字符串文字时方法失败的原因。您有机会尝试下面我的答案吗?我没有使用
=VLOOKUP()
语法,你能把它转换成我使用它的方式吗?你注意到你尝试的结果是“字符串”吗?但是我的工作表中没有单元格有公式,你的代码看起来好像是在尝试将公式插入单元格。这不是我要做的。很抱歉没有准确理解你想要的,但现在它起作用了。Evaluate函数的作用与括号中的相同,但它使用一个字符串作为参数,因此您可以像answer中所做的那样进行连接。当我尝试此操作时,仍然会出现\NAME?
错误。你确定你没有缺少一组引号吗?我没有使用=VLOOKUP()
语法,你能把它转换成我使用它的方式吗?你注意到你尝试的结果是“字符串”吗?但我的工作表中没有单元格有公式,你的代码似乎在尝试将公式插入单元格。这不是我要做的。很抱歉没有准确理解你想要的,但现在它起作用了。Evaluate函数的作用与括号中的相同,但它使用一个字符串作为参数,因此您可以像answer中所做的那样进行连接。当我尝试此操作时,仍然会出现\NAME?
错误。你确定没有缺少一组引号吗?仅供参考,方括号实际上更像是VBA的Evaluate
函数的快捷方式。在OP中不起作用,因为i
的计算结果不在公式中+我在OP公式中没有看到任何I
?哎呀,那是我的简化测试。我指的是变量CurrName
@douglancy——为什么不呢?我想这一定是OP问题的根源所在。在前一行中有一个赋值语句currName=“string”
。为什么它不计算呢?因为这就像把整个公式放进一个单元格CurrName
在这种情况下毫无意义。Evaluate中没有求值,换句话说,它不知道CurrName
是一个设置为“String”的变量。同样,这就像你在一个单元格中输入了整个公式。您是对的,这是OP问题的根源。仅供参考,方括号实际上更像是VBA的求值
函数的快捷方式。在OP中不起作用,因为i
的计算结果不在公式中+我在OP公式中没有看到任何I
?哎呀,那是我的简化测试。我指的是变量CurrName
@douglancy——为什么不呢?我想这一定是OP问题的根源所在。在前一行中有一个赋值语句currName=“string”
。为什么它不计算呢?因为这就像把整个公式放进一个单元格CurrName
在这种情况下毫无意义。Evaluate中没有求值,换句话说,它不知道CurrName
是一个设置为“String”的变量。同样,这就像你在一个单元格中输入了整个公式。你是对的,这是OP问题的根源。