刷新Excel VBA函数结果


71

如何获得用户定义的函数,以基于电子表格中已更改的数据重新评估自身?

我试着F9Shift+F9

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

Answers:


124

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

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

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


18
谢谢,只是因为这把我的头撞在桌子上。应该指出,尽管在Excel 2010中,您需要将True传递给Application.Volatile,即Application.Volatile True
mdm 2010年

@mdm感谢您提供有关True的信息!Excel 2013中的自定义工作表功能也需要此功能!
timbram

1
当我更改单元格的值时,此方法有效,但是我有一个基于填充颜色对单元格求和的函数,并且当我更改单元格的填充颜色时,此函数不会更新该函数,因此必须重新输入该值。更改填充颜色时可以实时更新工作表吗?
克里斯L

@ChrisL您是否找到了基于填充颜色的计算用例的解决方案?感谢您的解决方案。
smartini

@smartini我再也没有继续寻找解决方案。我没有足够频繁地使用填充颜色功能。我希望对4年前的评论做出快速回答,但从未成功。也许最好开始一个新的问题。如果您愿意,请在此处给我留言,以便我关注。
克里斯·L

39

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

  • F9 重新计算所有打开的工作簿中的所有工作表
  • Shift+F9 重新计算活动工作表
  • Ctrl+ Alt+F9 重新计算所有打开的工作簿中的所有工作表(完全重新计算)
  • Shift+ Ctrl+ Alt+F9重建依赖关系树并进行完整的重新计算

16

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


这是你唯一的选择,如果您有Excel 2007中看到,因为在Application.VolatileOffice 2010中加入方法
我说恢复莫妮卡

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

1

切换到自动:

Application.Calculation = xlCalculationAutomatic    

要切换到手动:

Application.Calculation = xlCalculationManual    

1

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


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

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

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

请稍微解释一下代码。它将大大提高实用性。
Trilarion 2014年

rng.Formula = rng.Formula与输入单元格并再次按Enter相同。它强制Excel重新计算单元格-包括任何自定义函数。
Sam V
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.