【问题标题】:Using multiple UDF functions in Application.Evaluate在 Application.Evaluate 中使用多个 UDF 函数
【发布时间】: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?

我尝试了以下方法:

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

我想避免解析公式并一一调用我的 UDF。

有什么想法吗?

【问题讨论】:

    标签: excel excel-dna


    【解决方案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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      相关资源
      最近更新 更多