所以我正在使用Instr with Evaluation并面临一些困难
代码如下
myIneq=">"
myString1="Hello"
myString2="el"
Evaluate( "Instr(" & myString1 & "," & myString2 & ")" & myIneq & cstr(0)
我收到错误2029.基于this msdn link我假设它正在尝试将“Hello”评估为变量名称。我的工作是什么,我知道必须有一个。
由于
答案 0 :(得分:1)
我从错误2029(#NAME?)和您正在使用Excel的链接推断。在这种情况下,答案很简单。 Application.Evaluate
评估 Excel 表达式,而不是VBA代码。也就是说,您在表达式中调用的任何函数都必须是可以从Excel公式调用的函数。 (而且你是正确的,Excel试图评估它无法识别的符号的值,因此会给你一个#NAME?错误。)
有一个Excel工作表函数FIND
,它与VBA函数Instr
完全相同,所以如果你的例子不是太简化,这可能就是你需要做的全部。
我只是将其输入立即窗口:
x="Hello"
y="el"
?Evaluate("FIND(""" & y & """, """ & x & """)")
2
ineq = ">"
?Evaluate("FIND(""" & y & """, """ & x & """)" & ineq & "0")
True
它似乎有效。
请注意Evaluate
是一个函数,因此它希望接收一个字符串参数,然后返回该字符串求值的内容,如果将其视为Excel公式语法表达式。在你的例子中,你似乎没有对返回值做任何事情,所以我想我会提到它。
答案 1 :(得分:1)
“评估”并不了解所有Excel功能。
例如,尝试评估“instr”将给出错误2029.但是有一个很好的解决方法:
代码将与此类似:
Sub test()
MsgBox Evaluate(" Instring(""Hello"",""el"") ")
Msgbox "\o/ ! ... I owe a beer to someone out there"
End Sub
Function Instring(a, b)
'make instr visible to 'evaluate'
Instring = InStr(a, b)
End Function
答案 2 :(得分:0)
您正在评估字符串InStr(Hello,el)
显然,这不是你想要的。
您需要使用带引号的字符串文字。