Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在VBA中将变量传递到VLOOKUP_Excel_Vba - Fatal编程技术网

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问题的根源。