【问题标题】:will Excel UDF gets calculation upon open?Excel UDF 会在打开时进行计算吗?
【发布时间】:2014-07-16 16:45:51
【问题描述】:

我的 Excel 2007 设置为自动计算模式。 我有两个 Excel 文件。两个文件中都使用了 MyUDF(多个单元格)。 当我在 Excel 中打开一个文件时,我注意到没有计算 MyUDF。 但是当我打开另一个文件时,会计算所有 MyUDF。 所以我有点困惑,什么时候会在打开时计算 UDF,什么时候不计算? MyUDF 是用 C# 编写的 MyAddIn 中的 UDF

编辑 这两个文件在同一个 Excel 实例中打开。 MyUDF 不是易失的。

谢谢

编辑 我找到了http://social.msdn.microsoft.com/Forums/en-US/b477c05a-ae0a-470c-8ad5-482ecd05944b/xll-addin-does-not-calculate-udf-when-opening-a-workbook?forum=exceldev 它说xla会,xll,vba不会。 嗯,这和我看到的不符。

【问题讨论】:

  • 它们是同一个工作簿,只是两个实例,还是在两个不同的工作簿中使用了相同的函数?或者换一种说法,两个workbook的内容是一样的吗?
  • 两个工作簿的内容不同。但他们使用相同的 UDF,即 MyUDF

标签: c# excel user-defined-functions


【解决方案1】:

不一定。比如:

Public Function MYUDF() As Date
    Application.Volatile
    MYUDF = Now
End Function

将被重新计算,但是类似于:

Public Function MYUDF() As Date
    MYUDF = Now
End Function

不得重新计算。

【讨论】:

  • 谢谢。 MyUDF 不是易失的。我只是不确定为什么在打开一个工作簿时会在一个工作簿中计算相同的函数,但在其他工作簿中却没有。
【解决方案2】:

在工作簿的打开事件中设置“自动计算”可能是个好主意。像这样的东西在你的ThisWorkbook 对象中(这是重要!):

Private Sub Workbook_Open()
    Application.Calculation = xlCalculationAutomatic
End Sub

这只是为了确保按照您在工作簿中的预期设置设置,以避免依赖 Excel 应用程序在其选项/设置中的计算模式。如果不出意外,至少它消除了您为什么会出现这种行为的一种可能性。

【讨论】:

    【解决方案3】:

    Excel“有帮助”记住函数的调用位置。

    由于两个电子表格中的函数相同,Excel 可能只是等待另一个打开,以便进行计算。检查电子表格中没有重新计算的公式,看看它是否更改为'C:\MyDocs\MyOtherSpreadsheet.xlsb'!MyUDF(A1)之类的东西。

    如果有,请搜索完整的电子表格名称(包括用于分隔符的额外字符)并替换为空。

    如果没有,请将计算设置为自动。要强制重新计算,请从功能区中选择立即重新计算,按 F9,或者进行搜索和替换,然后将所有 = 替换为完全相同。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 1970-01-01
      • 2022-01-12
      • 2020-10-12
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      相关资源
      最近更新 更多