如何让用户定义的函数根据电子表格中更改的数据重新评估自己?
我试过F9了Shift+F9。
唯一可行的方法是使用函数调用编辑单元格,然后按 Enter。
如何让用户定义的函数根据电子表格中更改的数据重新评估自己?
我试过F9了Shift+F9。
唯一可行的方法是使用函数调用编辑单元格,然后按 Enter。
您应该Application.Volatile
在函数的顶部使用:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
然后,只要工作簿更改(如果您的计算设置为自动),它将重新评估。
有关在 Excel 中计算的 F9 键盘快捷键的更多信息
好的,我自己找到了这个。您可以使用Ctrl++Alt来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
这比 刷新计算更好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
Application.Volatile
不适用于使用我自己的函数重新计算公式。我使用以下功能:
Application.CalculateFull
我发现最好只在更改特定单元格时更新计算。这是放置在“工作表”“更改”事件中的示例 VBA 代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F3")) Is Nothing Then
Application.CalculateFull
End If
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