【问题标题】:VBA String to FormulaVBA 字符串到公式
【发布时间】:2013-12-02 14:16:34
【问题描述】:

您好,我创建了一个评估字符串的快速函数

Function Evalue(ByVal str As String)
Application.Volatile
Evalue = Evaluate([str])
End Function

我有一个数组,其中包含我用作字符串的所有公式。根据情况,我使用 INDEX/MATCH 来选择好的公式,然后用 Evalue 来评估它。

如果字符串公式像 SUM(A1:A20) 一样位于 1 个块中,则它可以完美运行 但是如果它在几个块中,比如

SUM(A1:A20)-SUM(B1:B20) 它返回一个#NAME 错误,如果我将字符串放在' '" " 之间的数组中,它会返回#VALUE 错误。

【问题讨论】:

  • (SUM(A1:A20)-SUM(B1:B20)) 怎么样?
  • 还是 #NAME 错误...
  • 哦,对了。调用 Evaluate 时,可能会将 [] 关闭 str。正在检查...
  • 还是#NAME 错误...对我来说太糟糕了
  • 这是在模块中还是在工作表中?如果该函数在一个模块中,它将不知道您引用的是哪个表。我会尝试Evaluate("=SUM(Sheet1!A1:A20)-SUM(Sheet1!B1:B20)")

标签: string excel formula vba


【解决方案1】:

** snip ** 原始代码可以正常工作。

我测试的单元格如下所示:

=Evalue("SUM(A1:A3)-SUM(B1:B3)")

这是安全问题:

显然第一次您打开并保存工作簿,将代码存储在模块中足以使其可从工作表单元格中运行。但是,下一次您打开同一个工作表(即使它启用了宏),让工作再次正常工作要困难得多。显然,原始代码可以正常工作。但是,Excel 提示它存在,然后在您尝试使用它时报告 #NAME 错误。这里有一个线程提供更多信息:

http://social.msdn.microsoft.com/Forums/en-US/0a79b7d8-178e-4cf5-8bc3-782a58b55a8b/vbaexcel-function-defined-by-user-gives-error-personalxlsb-weird?forum=isvvba

显然它需要安装一个“插件”来执行最简单的操作。 (或者您可以使用您的个人.xlsb 文件)

【讨论】:

  • =Evalue("SUM(A1:A3)-SUM(B1:B3)") 这个公式与" " 给出#VALUE 错误而不是#NAME 错误如果我运行=SUM(A1:A3)-SUM(B1:B3) 它工作正常
  • @user2118020 看起来像是权限问题,请参阅上面的编辑。
猜你喜欢
  • 2018-09-14
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多