vba使用Eval但维护内部字符串

时间:2011-10-10 22:59:20

标签: excel vba

所以我正在使用Instr with Evaluation并面临一些困难

代码如下

 myIneq=">"
 myString1="Hello"
 myString2="el"
 Evaluate( "Instr(" & myString1 & "," & myString2 & ")" & myIneq & cstr(0)

我收到错误2029.基于this msdn link我假设它正在尝试将“Hello”评估为变量名称。我的工作是什么,我知道必须有一个。

由于

3 个答案:

答案 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.但是有一个很好的解决方法:

  • “evaluate”识别excel表格中所有添加的vba函数
  • 所以只需在不情愿的函数周围包含一个单行函数。

代码将与此类似:

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) 显然,这不是你想要的。

您需要使用带引号的字符串文字。