Board logo

標題: 當逐步執行巨集時, 如何暫停自訂公式的執行 [打印本頁]

作者: enoch    時間: 2014-11-10 11:43     標題: 當逐步執行巨集時, 如何暫停自訂公式的執行

本帖最後由 enoch 於 2014-11-10 11:46 編輯

當逐步執行巨集時(F8),
間中就會跳至自訂公式(Function 程序),
請問可以暫時停止自訂公式的執行嗎?
請多多指教
作者: GBKEE    時間: 2014-11-10 15:03

回復 1# enoch
  1. Option Explicit
  2. Sub Ex()
  3.    Application.Calculation = xlCalculationManual   '程式開始執行時 設定手動計算
  4.    '
  5.    '
  6.    '
  7.    [A1] = 515        '儲存格有數字變動,會重新計算自訂函數
  8.    [A2] = 5515
  9.    
  10.    'Application.Calculation = xlCalculationAutomatic
  11.    '程式結束前 設定自動計算
  12.    '但還是會執行自訂函數的程式碼
  13. End Sub
複製代碼

作者: mmxxxx    時間: 2014-11-10 15:42

沒想到還有這種功能, 受教, 只是不了解何時要使用這功能?為何?
作者: enoch    時間: 2014-11-10 17:13

請問
Application.Calculation = xlCalculationManual
與 Application.Calculation = xlManual 相同嗎?
作者: luhpro    時間: 2014-11-11 22:54

本帖最後由 luhpro 於 2014-11-11 23:10 編輯
沒想到還有這種功能, 受教, 只是不了解何時要使用這功能?為何?
mmxxxx 發表於 2014-11-10 15:42

自動計算 :
只要工作表內容有 異動 或是 存檔 與 檔案關閉 前都會執行運算一次.
一般非特殊情形大都會設定為此模式,
好處是只要有異動不須額外動作就可以很快看到運算結果,
壞處是當遇到下述情形時可能出現無限迴圈或錯誤結果.

手動計算:
必須是當使用者按下運算鈕(或是觸發預設運算程序)才會執行運算一次.
當運算的執行可能會拖慢亦或是拉長結果產生的時間時,
或是工作表內容異動頻繁發生亦或是前後兩次觸發時間較短(如盤中股票或期權價格異動),
可能會發生前次運算迴圈尚未完成就又觸發相同作用的運算時.
一般會設定為 手動計算 模式以避免無限迴圈或是錯誤結果的產生.

請問
Application.Calculation = xlCalculationManual
與 Application.Calculation = xlManual 相同嗎?
enoch 發表於 2014-11-10 17:13

只要在即時運算視窗中求值就可得知 :
?xlManual
-4135
?xlCalculationManual
-4135
作者: enoch    時間: 2014-11-12 10:46

在即時運算視窗中試過
?xlmanual =-4135
?xlCalculationAutomatic = -4105
想請問這些數字在平時計設程式或執行巨集時可以點應用呢?

有沒有辦法在執行巨集時停用指定Function 的執行,
若使用手動計算, 可能在執行巨集時會影響程式結果而沒有留意

請指教
作者: GBKEE    時間: 2014-11-12 15:27

回復 6# enoch
  1. Calculate 方法 套用至範例特定計算所有開啟的活頁簿、活頁簿中的特定工作表或工作表中指定範圍的儲存格,如下清單格所示:
  2. 若要計算 依照此範例
  3. 所有開啟的活頁簿 Application.Calculate (或只用 Calculate)
  4. 指定工作表 Worksheets(1).Calculate
  5. 指定範圍 Worksheets(1).Rows(2).Calculate
複製代碼
  1. Option Explicit
  2. Sub Ex()
  3.     Application.Calculation = xlCalculationManual
  4.     [B1] = 5
  5.     [C1] = 5
  6.     [A1] = "=TEST(B1,C1)"
  7.     [A2] = "=TEST(B1,C1)"
  8.     [B1] = 10
  9.     Range("A1").Calculate  '只重算A1,A2不會重算
  10. End Sub
  11. Function TEST(A, B) As Single
  12.     TEST = A * B
  13. End Function
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)