【问题标题】:Refresh Excel VBA Function Results刷新 Excel VBA 函数结果
【发布时间】:2010-09-05 21:05:37
【问题描述】:

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

我试过 F9Shift+F9

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

【问题讨论】:

    标签: excel vba user-defined-functions


    【解决方案1】:

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

    【讨论】:

    • 如果您将 Excel 2007 视为在 Office 2010 中添加了 Application.Volatile 方法,这是您唯一的选择。
    【解决方案2】:

    您应该在函数顶部使用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 年前对我的评论有一个快速的答复,但它从来没有来过。也许最好开始一个新问题。如果你这样做了,请在此处给我留言,以便我关注它。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案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】:
        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 再次计算单元格 - 包括任何自定义函数。
        【解决方案6】:

        切换到自动:

        Application.Calculation = xlCalculationAutomatic    
        

        切换到手动:

        Application.Calculation = xlCalculationManual    
        

        【讨论】:

          【解决方案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】:

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

            【讨论】:

              【解决方案9】:

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

              Private Sub Worksheet_Change(ByVal Target As Range)
                If Not Intersect(Target, Range("F3")) Is Nothing Then
                  Application.CalculateFull
                End If
              End Sub
              

              【讨论】:

                猜你喜欢
                • 2013-09-06
                • 2012-02-14
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-10-21
                • 2021-09-04
                相关资源
                最近更新 更多