我在工作表中设置了一个简单的if语句,其中if条件是VBA用户定义的函数:
Function CellIsFormula(ByRef rng)
CellIsFormula = rng(1).HasFormula
End Function
Run Code Online (Sandbox Code Playgroud)
这个功能似乎工作正常:

但由于某些原因,我无法弄清楚,该单元正在评估错误.更糟糕的是,在评估公式时,excel将错误归因于不会产生错误的计算步骤:

最重要的是,真正让我感到震惊的是,如果我只是重新输入公式,或强制完全重新计算(Ctrl+ Alt+ F9) - 公式评估没问题!

我已经尝试通过添加Application.Volatile到函数代码使公式变为volatile ,但它没有改变任何东西.刷新计算的其他方法,例如将计算设置为手动然后返回自动,隐藏"重新计算工作表",或仅使用F9或Ctrl+ F9不工作,只重新输入公式或Ctrl+ Alt+ F9将导致函数正确重新计算.
更改if语句中引用的其中一个单元格不会解决问题,但是,更改"CellIsFormula"函数引用的单元格确实可以解决问题.每次重新打开工作表时,错误都会恢复.