刷新 Excel VBA 函数结果
Posted
技术标签:
【中文标题】刷新 Excel VBA 函数结果【英文标题】:Refresh Excel VBA Function Results 【发布时间】:2008-08-14 13:54:43 【问题描述】:如何让用户定义的函数根据电子表格中更改的数据重新评估自己?
我试过 F9 和 Shift+F9。
似乎唯一可行的方法是使用函数调用编辑单元格,然后按 Enter。
【问题讨论】:
【参考方案1】:您应该在函数顶部使用Application.Volatile
:
Function doubleMe(d)
Application.Volatile
doubleMe = d * 2
End Function
它会在工作簿更改时重新评估(如果您的计算设置为自动)。
【讨论】:
谢谢,我只是因为这个而把头撞在桌子上。应该指出,在 Excel 2010 中,您需要将 True 传递给 Application.Volatile,即Application.Volatile True
。
@mdm 感谢您提供关于 True 的信息! Excel 2013 中的自定义工作表函数也需要这个!!
这在我更改单元格的值时有效,但是我有一个根据填充颜色对单元格求和的函数,当我更改单元格的填充颜色时,这不会更新函数,我必须重新输入值。我可以在更改填充颜色时实时更新工作表吗?
@ChrisL 您是否为您的用例找到了基于填充颜色计算的解决方案?感谢您的解决方案。
@smartini 我从未继续寻找解决方案。我没有经常使用我的填充颜色功能,这并不重要。我希望 4 年前对我的评论有一个快速的答复,但它从来没有来过。也许最好开始一个新问题。如果你这样做了,请在此处给我留言,以便我关注它。【参考方案2】:
有关在 Excel 中计算的 F9 键盘快捷键的更多信息
F9 重新计算所有打开的工作簿中的所有工作表 Shift+ F9 重新计算活动工作表 Ctrl+Alt+ F9 重新计算所有打开的工作簿中的所有工作表(完全重新计算) Shift + Ctrl+Alt+ F9 重建依赖树并进行完全重新计算【讨论】:
【参考方案3】:好的,我自己找到了这个。您可以使用 Ctrl+Alt+F9 来完成此操作。
【讨论】:
如果您将 Excel 2007 视为在 Office 2010 中添加了Application.Volatile
方法,这是您唯一的选择。【参考方案4】:
如果您在 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
【讨论】:
【参考方案5】:切换到自动:
Application.Calculation = xlCalculationAutomatic
切换到手动:
Application.Calculation = xlCalculationManual
【讨论】:
【参考方案6】:Application.Volatile
不适用于使用我自己的函数重新计算公式。我使用以下功能:
Application.CalculateFull
【讨论】:
【参考方案7】:这比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
【讨论】:
【参考方案8】:我发现最好只在特定单元格更改时更新计算。这是放置在“工作表”“更改”事件中的示例 VBA 代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("F3")) Is Nothing Then
Application.CalculateFull
End If
End Sub
【讨论】:
【参考方案9】: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
【讨论】:
请稍微解释一下代码。会大大增加实用性。 rng.Formula = rng.Formula 与输入单元格并再次按回车相同。它会强制 Excel 再次计算单元格 - 包括任何自定义函数。以上是关于刷新 Excel VBA 函数结果的主要内容,如果未能解决你的问题,请参考以下文章