2013-02-13 53 views
3

據我所知,Application.ScreenUpdating = true值被保留,直到設置了Application.ScreenUpdating = false。但是,這個價值的「終生」是什麼?在打開工作表時,是否在啓動和結束時調用它的過程?Excel 2010中的Application.ScreenUpdating值的生命週期是什麼?

製造類,以保持ScreenUpdating值一致,以我的需求:

  • 初始化類
  • 集ScreenUpdating =假
  • 在手術結束時或在錯誤的情況下恢復的值設置爲True。

該類處理這種情況確定。

有時候需要相反:

  • 初始化類
  • 組ScreenUpdating =真
  • 在過程結束時或在錯誤的情況下的值恢復爲False。

    我在這裏遇到麻煩;該類正確地設置了ScreenUpdating = false的值,但是當類獲得ScreenUpdating的「實際」值時,它始終爲真。沒有其他程序或插件可以改變這個值。

已經準備了test sheet以顯示以上幾點。從「suCaller」按鈕上方的下拉菜單中選擇ScreenUpdating的值。

  • 選擇False並按下按鈕。
  • 設置False之前的值爲真如預期。
  • 測試數據從顯示ScreenUpdating新值(False)的另一個過程填充。
  • 數據填充後,該值重置爲True。
  • 再次按下按鈕,'實際'值與預期一致爲真
  • 做了很多次,值應該沒問題。

現在選擇True並按下按鈕。設定真之前

  • 值爲真如預期(其是從上方的值)
  • 測試數據被再次填充表示ScreenUpdating新值(真)
  • 數據填充之後,值被複位爲假。
  • 再次按下按鈕,'實際'值爲真並非假

該類只會否定新值以定義恢復值,所以結果會使我在生命週期中感到困惑,或者應該如何設置ScreenUpdating值。

我在課上做錯了什麼或缺少一些基本理論?

類模塊:ApplicationScreenUpdate

測試模塊:測試

Test Sheet TIA,奧斯卡。

回答

0

據我所知,這是行爲是由設計(但我沒有一個可引用的來源)。

雖然經驗豐富的開發人員會希望設置保持不變,但沒有經驗的開發人員可能不會意識到他們已經完成了什麼,並且會認爲如果他們在宏完成後手動將數據放入工作表中,Excel會被破壞。

你可以嘗試的東西是禁用應用程序事件,因爲有時他們可以重置值,也可以嘗試在將更新設置爲false後寫入值,但是我懷疑該值會在宏完成後出現。

+0

嗨詹姆斯;不太關注你。但是從我的測試中可以看出,無論其他過程如何,Application.EnableEvents都會「永久」保留其值,直到您更改爲止。您可以使用相同的類來測試它,只需使用EnableEvents更改對ScreenUpdating的所有引用即可。 – Oscar 2013-02-13 20:28:20

+0

其中一些事件會更改屏幕更新屬性...所以這是一些嘗試,但正如我最初所說,這種行爲看起來是按設計進行的。 – 2013-02-15 22:02:04

0

已經發現ScreenUpdating或DisplayAlerts值的生存期是修改值的最高程序。在程序結束時;即使該值設置爲false,此屬性的值也會恢復爲TRUE。

另一方面,EnableEvents或Calculation在過程結束時保留其值,修改值爲TRUE或FALSE。

打開此workbook並運行以下順序的方法:

  • TestFalse
  • TestCurrentValues
  • TestValues
  • TestCurrentValues
  • RestoreValues
  • TestCurrentValues

運行每種方法後,請參閱工作表中的值。

無法確認哪些應用程序屬性會修改其他值的值。但是正如詹姆斯所寫的那樣,一些人改變了自己的價值'設計'

相關問題