【问题标题】:Application.Evaluate Runtime Error Type MismatchApplication.Evaluate 运行时错误类型不匹配
【发布时间】:2014-04-09 16:04:25
【问题描述】:

我遇到此运行时错误 - VBA 中以下函数调用的类型不匹配

Dim sTest As String
sTest = "=Search(" & Chr(34) & "MyString" & Chr(34) & Chr(44) & "A2" & ")>0"
''the above evaluates to =Search("MyString",A2)>0
Application.Evaluate(sTest)

因此评估函数抛出运行时错误类型不匹配

我试过了

sTest = "=Search(" & Chr(34) & "MyString" & Chr(34) & Chr(44) & Chr(34) "Test MyString" & Chr(34) ")>0"

还是一样的错误

当我在 Excel 公式栏中使用上述字符串时,它可以工作!!

我试过了

sTest = "=Search(""MyString"", ""Test MyString"")>0"

它在 VBA 中工作

让我大吃一惊

sTest = "=Search(" & Chr(34) & Chr(34) & "MyString" & Chr(34) & Chr(34) & Chr(44) & Chr(34) & Chr(34) & "Test MyString" & Chr(34) & Chr(34) & ")>0"

喧闹的工作

有人能帮忙看看为什么第一段代码不起作用吗?

【问题讨论】:

  • Search 如果没有找到,则返回#VALUE!,因此,您不能使用Search()>0。改用这个:sTest = "=ISNUMBER(Search(" & Chr(34) & "MyString" & Chr(34) & Chr(44) & "A2" & "))",正如蒂姆建议的那样,使用"=ISNUMBER(Search(""MyString"",A2))" 更具可读性

标签: excel vba type-conversion runtime-error runtimeexception


【解决方案1】:

如果你想在一个字符串中包含一个引号,你需要做的就是把它加倍:

sTest = "=Search(""MyString"",A2)>0"

对我来说这比使用Chr(34) 更容易

请注意,如果未找到字符串,SEARCH() 将返回错误,而不是 0。

【讨论】:

  • 该死的..对于我的手动测试,我会测试错误情况。现在我设置断点并将 A2 中的单元格值更改为“Test MyString”并且它起作用了。因此,由于搜索返回的错误,评估确实失败了。谢谢先生。
最近更新 更多