技巧區‎ > ‎高級程度‎ > ‎

重算你自訂的函數 [1999年3月]

張貼者:2010年5月29日 上午6:15Carson Cheng   [ 已更新 2010年5月29日 上午6:15 ]
一個自訂的函數只會在參數更改時重算,如果你想它在任何數值更改後都更新的話,你可以在程式碼加進:
  Application.Volatile
  把這個函數設定為volatile(有概是易變的意思)。這句的可以在函數內任何位置,但建議你放在前方,方便閱讀。

  加了Volatile之後,每當工作表有更改,Excel都會重算。

  在這個例子當中,更改語言的選擇,便可以看到 volatile 與非 volatile 函數的分別。

  非volatile的函數(方法1),只會在參數更改時才會重算,所以對語言的選擇沒有反應。除非是volatile的函數(方法2),又或參數內包含有關的變數(方法3)。

  原來:


  更改語言後:


  看看程式碼,就知道它們有什麼分別:


語法:

' 方法1:只會在參數rEnglishDesc有更改時,才會觸動Excel去重算此函數
Function DescNonV(rEnglishDesc As Range) As String
   Select Case Range("LangChoice")
       Case Is = 1
           DescNonV = rEnglishDesc.value
       Case Is = 2
           DescNonV = rEnglishDesc.Cells(1, 2).value
   End Select
End Function


' 方法2:每當工作表有更新時,Excel都會重算此自訂函數。
Function DescV(rEnglishDesc As Range) As String
   Application.Volatile
   
   Select Case Range("LangChoice")
       Case Is = 1
           DescV = rEnglishDesc.value
       Case Is = 2
           DescV = rEnglishDesc.Cells(1, 2).value
   End Select
End Function

' 方法3:由於參數包括語言的選擇,所以當用戶選擇了不同的語言時,Excel會重算此函數。
Function Desc(iChoice As Integer, rEnglishDesc As Range) As String
   Select Case iChoice
       Case Is = 1
           Desc = rEnglishDesc.value
       Case Is = 2
           Desc = rEnglishDesc.Cells(1, 2).value
   End Select
End Function

Ĉ
3_7.xls
(38k)
Carson Cheng,
2010年5月29日 上午6:16
Comments