有谁知道如何让用户定义的函数重新评估自身(基于电子表格中更改的数据)?我试过了 F9转移+F9, ,但那些不起作用。似乎唯一有效的方法是使用函数调用编辑单元格,然后按 Enter 键。有任何想法吗?我好像记得我可以做到这一点......

有帮助吗?

解决方案

你应该使用 Application.Volatile 在你的函数的顶部:

Function doubleMe(d)
    Application.Volatile
    doubleMe = d * 2
End Function

然后,只要工作簿发生更改(如果您的计算设置为自动),它就会重新计算。

其他提示

有关 Excel 中计算的 F9 键盘快捷键的更多信息

  • F9 重新计算所有打开的工作簿中的所有工作表
  • 转移+ F9 重新计算活动工作表
  • 控制键+替代+ F9 重新计算所有打开的工作簿中的所有工作表(完全重新计算)
  • 转移 + 控制键+替代+ F9 重建依赖树并进行完全重新计算

好吧,我自己找到了这个。您可以使用 控制键+替代+F9 来实现这一目标。

如果您在 UDF 参数列表中包含对电子表格数据的所有引用,则只要引用的数据发生更改,Excel 就会重新计算您的函数:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function

您还可以使用 Application.Volatile, ,但这有一个缺点,即使您的 UDF 始终重新计算 - 即使不需要,因为引用的数据尚未更改。

Public Function doubleMe()
    Application.Volatile
    doubleMe = Worksheets("Fred").Range("A1") * 2
End Function

要切换到自动:

Application.Calculation = xlCalculationAutomatic    

要切换到手动:

Application.Calculation = xlCalculationManual    

Application.Volatile 不适用于重新计算包含我自己的函数的公式。我使用以下函数:Application.CalculateFull

这比刷新计算更好 Range(A:B).Calculate:

Public Sub UpdateMyFunctions()
    Dim myRange As Range
    Dim rng As Range

    ' Assume the functions are in this range A1:B10.
    Set myRange = ActiveSheet.Range("A1:B10")

    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
End Sub
Public Sub UpdateMyFunctions()
    Dim myRange As Range
    Dim rng As Range

    'Considering The Functions are in Range A1:B10
    Set myRange = ActiveSheet.Range("A1:B10")

    For Each rng In myRange
        rng.Formula = rng.Formula
    Next
End Sub
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top