77

如何让用户定义的函数根据电子表格中更改的数据重新评估自己?

我试过F9Shift+F9

唯一可行的方法是使用函数调用编辑单元格,然后按 Enter。

4

9 回答 9

132

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

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

然后,只要工作簿更改(如果您的计算设置为自动),它将重新评估。

于 2008-08-15T06:18:51.387 回答
42

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

  • F9 重新计算所有打开的工作簿中的所有工作表
  • Shift+F9 重新计算活动工作表
  • Ctrl+ Alt+F9 重新计算所有打开的工作簿中的所有工作表(完全重新计算)
  • Shift+ Ctrl+ Alt+F9重建依赖树并进行完整的重新计算
于 2008-09-07T16:11:58.090 回答
18

好的,我自己找到了这个。您可以使用Ctrl++AltF9完成此操作。

于 2008-08-14T13:59:21.643 回答
11

如果您在 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
于 2008-09-23T11:12:34.080 回答
1

要切换到自动:

Application.Calculation = xlCalculationAutomatic    

要切换到手动:

Application.Calculation = xlCalculationManual    
于 2014-12-03T19:22:59.960 回答
1

这比 刷新计算更好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
于 2015-06-10T00:29:57.110 回答
1

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

于 2017-11-21T08:20:20.443 回答
1

我发现最好只在更改特定单元格时更新计算。这是放置在“工作表”“更改”事件中的示例 VBA 代码:

Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("F3")) Is Nothing Then
    Application.CalculateFull
  End If
End Sub
于 2019-09-13T20:17:47.507 回答
0
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
于 2014-10-22T12:01:38.523 回答