在 Application.Evaluate 中使用多个 UDF 函数
Posted
技术标签:
【中文标题】在 Application.Evaluate 中使用多个 UDF 函数【英文标题】:Using multiple UDF functions in Application.Evaluate 【发布时间】:2019-08-25 17:55:22 【问题描述】:我已经用 C# 构建了Excel-Dna Addin
。我有几个在某些情况下需要运行的 UDF 函数。
我的单元格包含具有不同参数的 UDF,我在这里展示的是简化版本。
我正在为此使用Application.Evaluate
函数。
我的 UDF:
[ExcelFunction(Name = "Test.TestMe", Description = "Some test", IsHidden = false)]
public static int TestMe(int i)
return i + 1;
如果我打电话给Application.Evaluate("=Test.TestMe(1)")
,我会得到结果 2。
如果我尝试以下操作:Application.Evaluate("=Test.TestMe(1)+Test.TestMe(2)")
我的 UDF 函数都没有被调用。
Evaluate 函数返回:-2146826259 = #Name?
我尝试了以下方法:
-
删除了函数名
"Test.TestMe(1)+Test.TestMe(2)"
之前的 =
使用完全限定名称调用。 "myexcel.xlsx!Test.TestMe(1)+Test.TestMe(2)"
我知道Application.Evaluate
限制为 255 个字符。
我想避免解析公式并一一调用我的 UDF。
有什么想法吗?
【问题讨论】:
【参考方案1】:Charles Williams (https://fastexcel.wordpress.com/2011/11/02/evaluate-functions-and-formulas-fun-how-to-make-excels-evaluate-method-twice-as-fast/) 在描述此限制时指出了一篇(现已丢失的)知识库文章:
如果字符串公式包含对 UDF 和它的名称的引用 如果名称引用发生在 UDF 参考:
如果fred
是命名范围且xyz()
是用户定义的 VBA 函数然后此语句返回错误 2029 [即#NAME?
]:Application.Evaluate("=xyz(b1)+fred")
此语句返回正确的值:Application.Evaluate("=fred+xyz(b1)")
Microsoft 知识库文章 823604 [我找不到] 指出了这个问题,但没有正确诊断出导致它的情况。
由于您的 UDF 名称在 Excel 中也是一个“名称”,因此它可能具有相同的怪癖,给您这个 #NAME?
错误。
所以我认为您遇到了一个长期存在的 Excel 怪癖,您可能希望使用 文件 -> 反馈 -> '发送皱眉' 按钮向 Microsoft 报告此问题。 /p>
【讨论】:
以上是关于在 Application.Evaluate 中使用多个 UDF 函数的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableViewCell 中使 UIView 出队