【问题标题】:VBA Evaluate function with string argumentsVBA 使用字符串参数评估函数
【发布时间】:2015-02-27 14:12:56
【问题描述】:

我有这个函数工作(它返回文本 DK001 在 ID 范围内所在的行)

Found = Application.Evaluate("=IF(ID=""DK001"",ROW(ID),""x"")")

我想将搜索条件(例如 DK001)作为字符串提供,例如

Found = Application.Evaluate("=IF(ID=SearchString,ROW(ID),""x"")")

我未能创建一个被接受为搜索条件的字符串。我需要你的帮助!我做错了什么?


这个 Evaluate 函数困扰着我......

如果我现在想向函数发送一个值(不是字符串)怎么办?

Found = Application.Evaluate("=IF(ID=1,ROW(ID),""x"")")

以上方法有效!

但如果我希望这是一个变量,比如

Found = Application.Evaluate("=IF(ID=MyValue,ROW(ID),""x"")")

然后呢?

【问题讨论】:

  • 这个 Evaluate 函数困扰着我......如果我现在想向函数发送一个值(不是字符串)怎么办? Found = Application.Evaluate("=IF(ID=1,ROW(ID),""x"")") 以上工作!但是,如果我希望这是一个变量,例如 Found = Application.Evaluate("=IF(ID=MyValue,ROW(ID),""x"")") 那么呢?

标签: excel vba evaluate


【解决方案1】:

" 将它们包含为文字:

SearchString = "DK001"
Found = Application.Evaluate(""=IF(ID=""" & SearchString & """,ROW(ID),""x"")")

【讨论】:

  • 谢谢!有用!我试图做同样的事情,但在搜索字符串内,但失败了。感谢您的帮助和快速解答!
【解决方案2】:

使用stdVBA(主要由我自己维护的一个开源库),您可以使用stdLambda 来完成此操作,如下所示:

set lambda = stdLambda.Create("if id.value = $1 then id.row else ""x""").bindGlobal("id",range("ID"))
'later...
Found = lambda("DK001")

【讨论】:

    【解决方案3】:

    你可以试试

    Application.Evaluate("=IF(ID="" & searchsrtring & "",ROW(ID),""x"")")
    

    【讨论】:

    • 也试试这个,等等!
    • 不!获取错误 2029。但亚历克斯的建议奏效了。也感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多