首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Application.Evaluate中使用多个UDF函数

在Application.Evaluate中使用多个UDF函数
EN

Stack Overflow用户
提问于 2019-08-25 17:55:22
回答 1查看 272关注 0票数 0

我在C#建造了C#。在某些情况下,我需要运行几个UDF函数。我的单元格包含具有不同参数的UDF,我在这里显示的是简化版本。

为此,我将使用Application.Evaluate函数。

我的UDF:

代码语言:javascript
复制
[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函数都不会被调用。

计算函数返回:-2146826259 = #Name?

我试过以下几点:

  1. 在函数名=之前删除"Test.TestMe(1)+Test.TestMe(2)"
  2. 使用完全限定的名称调用。"myexcel.xlsx!Test.TestMe(1)+Test.TestMe(2)"
  3. 我知道Application.Evaluate仅限于255个字符。

我希望避免解析公式,并逐个调用我的UDF。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 13:09:08

查尔斯·威廉姆斯(https://fastexcel.wordpress.com/2011/11/02/evaluate-functions-and-formulas-fun-how-to-make-excels-evaluate-method-twice-as-fast/)在描述这一限制时指出了一篇(现在缺失的) KB文章:

如果字符串公式同时包含对UDF和名称的引用,则如果名称引用发生在UDF引用之后,则将失败,从而导致错误2029:

  • 如果fred是一个命名范围,而xyz()是一个用户定义的VBA函数,那么这个语句返回错误2029 [即#NAME?__]:Application.Evaluate("=xyz(b1)+fred")
  • 此语句返回正确的值:Application.Evaluate("=fred+xyz(b1)")
  • Microsoft文章823604无法识别此问题,但无法正确诊断导致此问题的情况。

由于您的UDF名称在Excel中也是一个“名称”,因此它可能也会受到相同的影响,从而给出这个#NAME?错误。

所以我认为你遇到了一个由来已久的Excel怪癖,你可能想用文件->反馈->‘发送一个皱眉’按钮向微软报告这件事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57648433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档