2008-08-14 79 views
55

有誰知道我如何獲得用戶定義的函數來重新評估自己(基於電子表格中已更改的數據)?我試過F9 + F9 ,但那些不工作。似乎工作的唯一的東西是用函數調用編輯單元格,然後按Enter鍵。有任何想法嗎?我似乎記得能夠做到這一點...刷新Excel VBA函數結果

回答

93

你應該在你的函數的頂部使用Application.Volatile

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

然後它會重新評估每當工作簿的變化(如果你的計算被設置爲自動)。

+2

這是真棒,我不知道,多虧了一堆 – 2008-10-10 12:37:55

+13

謝謝,剛纔我的頭撞在桌子上。應該指出,儘管在Excel 2010中,您需要將True傳遞給Application.Volatile,即「Application.Volatile True」。 – mdm 2010-03-31 13:00:36

+2

謝謝。您。如果可以的話,我會給你買啤酒! – 2012-03-30 15:05:00

13

好的,自己找到了這一個。您可以使用Ctrl + Alt + F9來完成此操作。

+0

這是你唯一的選擇,如果您有Excel 2007中看到,因爲在Office中添加了`Application.Volatile`方法2010年 – 2015-03-12 19:31:58

28

在Excel中的F9快捷鍵進行計算的一些詳細信息,

  • F9重新計算所有工作表中的所有打開的工作簿
  • + F9重新計算活動工作表
  • Ctrl + Alt + F9重新計算所有工作表中的所有打開的工作簿(完整計算)
  • + 按Ctrl + Alt鍵 + F9重建的依賴關係樹和不完整計算
9

如果包括所有對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
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 
1

要切換到自動:

Application.Calculation = xlCalculationAutomatic  

切換到手動:

Application.Calculation = xlCalculationManual  
1

它運作良好,這樣一來刷新計算比範圍更好(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 
-2

Application.Volatile不適用於用我自己的函數重新計算公式。我用下面的功能: Application.CalculateFull