用户定义的函数不重新计算

tpa*_*ale 17 excel vba xlsx user-defined-functions xlsm

我最近获得了一个大的,稳定的XLSM文件,并将其拆分为XLAM和XLSX.XLSX调用中的数千个单元(udfs)在XLAM中起作用,每个这样的udf都以"Application.Volatile"语句开头(过度杀戮,强制重新计算).

XLSX不会通过Ctrl-Alt-Shift F9重新计算F9,也不会通过Application.CalculateFull重新计算Cell.Calculate.XLSX单元格只是"死"......但是......如果我点击F2编辑公式然后点击ENTER,我可以逐个重新唤醒它们.以这种方式重新唤醒的细胞似乎保持清醒,之后通常会重新调整.

有没有人遇到过这种奇怪的行为,是否还有其他方法可以强制Excel从头开始重建calc图,我应该尝试一下?

如果重要的话需要另外注意:我通过File Open打开了XLAM和XLSX,并且没有使用File ... Options ... Addins route安装XLAM - 因为过去我这样做了,分钟你"取消选中"并安装了XLAM,然后所有的UDF引用都被完整的路径名链接取代 - 非常难看.或者,如果有人可以概述安装XLAM插件的解决方法,但不会在任何地方创建断开的链接,我将继续使用它.

小智 8

这有效:

Sub Force_Recalc()
    Cells.Replace What:="=", Replacement:="=", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 首先,令人遗憾的是,最新的 Excel 在 2021 年仍然存在此问题。此外,在包含超过 1000 万个公式的工作簿上执行此解决方法非常残酷。 (2认同)

tpa*_*ale 6

想出来 - 不确定为什么微软有这个"功能":

在打开XLAM之前打开/创建使用XLAM功能的原始XLSX时会出现这种情况.在这种情况下,任何数量的哄骗都不会导致XLSX公式绑定并执行这些XLAM函数,除非您进入每个单元格并触摸公式栏并点击ENTER(或者,正如我发现的那样,通过全局替换这样做) - 在我的情况下,所有的函数都开始为"k",所以全局用"k"代替"k"修复了错误).如果首先打开XLAM,则不会出现此问题.

  • 可以通过在VBA引用对话框中添加引用来强制XLSX打开XLAM,但不确定是否有帮助. (2认同)

Den*_*din 5

对于可以访问实例的UDFApplication可以使用:

Application.CalculateFull()
Run Code Online (Sandbox Code Playgroud)

MSDN源码在这里