刷新Excel VBA函数结果

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

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

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

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

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

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

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

如果在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 

要切换到自动:

 Application.Calculation = xlCalculationAutomatic 

要切换到手动:

 Application.Calculation = xlCalculationManual 

这个效果很好,刷新计算比范围(A:B)更好。计算

 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 

使用Excel 2010,我遇到了和Brian一样的问题。 当我尝试所有这里提出的解决scheme没有改善,用户定义函数似乎不重新计算,尽pipe有Application.Volatile,使用重新计算组合键等。但我确实意识到,我的函数定义是错误的所有单元格引用当包含该function的工作表不是正确的工作表,例如将单元格(a,b)更改为Application.Caller.Worksheet.Cells(a,b)时,它没有足够的资格正确工作! 我相信这是解决scheme,因为当包含我的function的工作表不是活动工作表时,单元格(a,b)被解释为引用当时发生活动的任何表单。

 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