以下VBA代碼停止在Me.Show
。在我的測試中,看起來Me.Show
停止了所有的代碼執行,即使代碼位於UserForm中。爲什麼顯示用戶窗體爲模態停止代碼執行?
這部分是用戶窗體外:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
這部分是用戶窗體內:
Private Sub ShowProgress()
Me.Show vbModal
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
代碼停止在Me.Show
,則顯示用戶窗體之後。沒有錯誤,它只是停止執行代碼。看來,以執行VBA模式UserForm內部代碼的唯一方法就是把它列入了UserForm_Activate過程是這樣的:
這部分是用戶窗體外:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
這部分是用戶窗體內:
Private Sub UserForm_Initialize()
Me.Show vbModal
End Sub
Private Sub UserForm_Activate()
Dim intSecond As Integer
For intSecond = 1 To 5
Application.Wait Now + TimeValue("0:00:01")
Me.ProgressBar1.Value = intSecond/5 * 100
Next intSecond
Me.Hide
End Sub
當然,我不能把Me.Show
內UserForm_Activate因爲該過程只UserFo後大火rm顯示事件。
爲UserForm.ShowModal
文檔說「當用戶窗體是模態的時,用戶必須提供信息或使用應用程序的任何其他部分之前關閉窗體。直到用戶窗體被隱藏或卸載不執行任何後續的代碼。」
我正在嘗試使用模態UseForm作爲進度條,以防止用戶在進程運行時與應用程序進行交互。但是,如果我的所有代碼必須位於UserForm_Activate過程中,這將很難完成。
我在這裏錯過了什麼嗎?爲什麼所有代碼執行停止在Me.Show
?
所有你真的需要,如果你想仍然能夠在窗體達與紙張互動做的是使用電話的用戶窗體時,此代碼: 'userform.show vbModeless'。 – Casey 2013-12-06 22:48:07