大家好,我們今日繼續(xù)講解VBA代碼解決方案的第90講內(nèi)容:代碼一旦啟動將無法退出,防止用戶中斷代碼運(yùn)行。在之前的幾篇文章中,我講了代碼優(yōu)化的幾點建議,其實代碼優(yōu)化是很值得商榷的問題,這里的優(yōu)化主要是速度的優(yōu)化,其實代碼的運(yùn)行是一個系統(tǒng)的工程,不僅僅是速度,還有視覺的效果,人機(jī)的交流是否通暢等等,我的幾篇文章就是拋磚引玉吧。 今日我要講的是代碼的技巧了,在使用VBA開發(fā)的程序交予用戶使用后,如果在運(yùn)行需要長時間執(zhí)行的宏代碼時,用戶在代碼運(yùn)行期間按下了<Esc>鍵或者<Ctrl+Break>組合鍵,代碼會中斷運(yùn)行;如下圖: 此時單擊'繼續(xù)'按鈕將繼續(xù)執(zhí)行代碼,單擊'結(jié)束'按鈕結(jié)束過程,單擊'調(diào)試'按鈕進(jìn)入中斷模式,這顯然有時候不是用戶所希望出現(xiàn)的,能否可以對上述的鍵值進(jìn)行屏蔽呢?答案當(dāng)然是肯定的。此時需要使用Application對象的EnableCancelKey屬性來進(jìn)行控制,應(yīng)用于Application對象的EnableCancelKey屬性控制將用戶中斷用于運(yùn)行程序的處理,語法如下: expression.EnableCancelKey 參數(shù)是expression必須的,是Application對象。 EnableCancelKey屬性值為下面常量之一。 ① xlDisabled 0 完全禁用'取消'鍵捕獲功能 ② xlErrorHandler 2 將中斷作為錯誤信號傳遞給運(yùn)行程序,由 On Error GoTo 語句設(shè)置的錯誤處理程序捕獲??刹东@的錯誤代碼為 18 ③ xlInterrupt 1 中斷當(dāng)前運(yùn)行程序,用戶可進(jìn)行調(diào)試或結(jié)束程序的運(yùn)行 如果我們將上述的EnableCancelKey屬性值設(shè)置為xlDisabled或者0,那么就不能退出代碼的運(yùn)行了。看下面的代碼實測: Sub MyNzEnablEsc() Dim i As Integer Application.EnableCancelKey = xlDisabled For i = 1 To 3000 Sheets('Sheet11').Cells(i, 1).Select Sheets('Sheet11').Cells(i, 1) = i Next Application.EnableCancelKey = xlInterrupt Sheets('Sheet11').Cells(1, 1).Select End Sub 代碼解析: MyNzEnablEsc過程在代碼運(yùn)行期間禁用'取消'鍵的捕獲功能。 只要Microsoft Excel返回空閑狀態(tài)并且沒有程序處于運(yùn)行狀態(tài),EnableCancelKey屬性都會重置為xlInterrupt。若要在程序運(yùn)行中捕獲或者禁用取消過程,則每次在程序被調(diào)用時必須明確更改EnableCancelKey屬性。 代碼截圖: 運(yùn)行之中是不允許退出的。如下圖,呵呵這個截圖沒有什么意義了。 今日內(nèi)容回向: 1 如何能使代碼不能中斷運(yùn)行? 2 Application.EnableCancelKey 的意義是什么? |
|
來自: 恒信通訊43a2p6 > 《待分類》