刷新Excel VBA函数结果

Bri*_*van 65 excel vba user-defined-functions

有谁知道我如何获得用户定义的函数来重新评估自己(基于电子表格中更改的数据)?我试过F9Shift+F9,但那些不工作.唯一可行的方法是使用函数调用编辑单元格,然后按Enter键.有任何想法吗?我似乎记得能够做到这一点......

vzc*_*czc 115

你应该Application.Volatile在你的功能的顶部使用:

Function doubleMe(d)
    Application.Volatile
    doubleMe = d * 2
End Function
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,只是在这张桌子上猛击我的头.应该指出虽然在Excel 2010中,您需要将True传递给Application.Volatile,即`Application.Volatile True`. (15认同)
  • 这在我更改单元格的值时有效,但我有一个基于填充颜色对单元格求和的函数,当我更改单元格的填充颜色时,这不会更新该函数,我必须重新键入该值。我可以在更改填充颜色时实时更新工作表吗? (2认同)

Rob*_*rns 36

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

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


Bri*_*van 15

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


小智 11

如果在UDF参数列表中包含对电子表格数据的所有引用,则只要引用的数据发生更改,Excel将重新计算您的函数:

Public Function doubleMe(d As Variant)
    doubleMe = d * 2
End Function
Run Code Online (Sandbox Code Playgroud)

您也可以使用Application.Volatile,但这样做的缺点是使UDF始终重新计算,即使它不需要,因为引用的数据没有更改.

Public Function doubleMe()
    Application.Volatile
    doubleMe = Worksheets("Fred").Range("A1") * 2
End Function
Run Code Online (Sandbox Code Playgroud)