我有一個VBA子程序,用於調用其他人寫入的子程序。偶爾,另一個子打開一個確定按鈕的MsgBox。另一個小組需要很長時間才能運行,我稱它爲數百次,所以我希望能夠在一夜之間運行。不幸的是,我找不到一種方法來自動在MsgBox上單擊「確定」。從VBA中的另一個子程序中取消MsgBox
我已經試過
Application.DisplayAlerts = False
但這不會取消消息框。
有沒有辦法做到這一點?
謝謝
我有一個VBA子程序,用於調用其他人寫入的子程序。偶爾,另一個子打開一個確定按鈕的MsgBox。另一個小組需要很長時間才能運行,我稱它爲數百次,所以我希望能夠在一夜之間運行。不幸的是,我找不到一種方法來自動在MsgBox上單擊「確定」。從VBA中的另一個子程序中取消MsgBox
我已經試過
Application.DisplayAlerts = False
但這不會取消消息框。
有沒有辦法做到這一點?
謝謝
這樣做的一種方法是稍微修改原始子代碼。你將需要有堅韌的必要權限...
True
修改原始子的頭。這將導致類似Sub OriginalSubName(
原設定的參數, Optional ShowMessages = True)
在其中MSGBOX被稱爲點,修改代碼是這樣的:
If showMessages = True Then 'The = True part is important here - see below.
showMessages is a Variant type
'The original statement that calls the msgBox
End If
保留原始分不變的代碼的其餘部分
False
作爲額外參數進行修改,修改您稱之爲原始子項的行。這導致OriginalSubName
您的一組參數, False
。這種方式默認情況下不禁止對話框,但是當你在你的sub中使用它的時候你會這樣做。不知道爲什麼我使用可選的Variant類型參數?
If showMessages = True Then
而不是僅僅是If showMessages Then
。@ Bart:可選參數並不總是必須是Variant類型。他們通常是變體的原因是因爲你可以使用ISMISSING()函數來測試調用過程是否已經傳遞了可選參數的值。如果可選參數是Variant以外的類型,那麼不能使用ISMISSING()(它總是返回FALSE)。 –
對此問題的回答可能會幫助您:http://stackoverflow.com/a/682732/493055 –
難道你不能編輯其他的子刪除msgbox調用嗎? –
它受密碼保護。我想我可以問一下,弄清楚是誰寫的。 – Eric