次の VBA コードは で停止しMe.Show
ます。私のテストから、Me.Show
コードが UserForm 内にある場合でも、すべてのコード実行が停止するようです。
この部分は UserForm の外側にあります:
Public Sub TestProgress()
Dim objProgress As New UserForm1
objProgress.ShowProgress
Unload objProgress
End Sub
この部分は UserForm の中にあります:
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
UserForm が表示された後、コードは で停止します。エラーはありません。コードの実行を中止するだけです。VBA でモーダル UserForm 内のコードを実行する唯一の方法は、次のように UserForm_Activate プロシージャにコードを含めることです。
この部分は UserForm の外側にあります:
Public Sub TestProgress()
Dim objProgress As New UserForm1
Load objProgress
Unload objProgress
End Sub
この部分は UserForm の中にあります:
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 の中に入れることはできません。なぜなら、そのプロシージャは UserForm Show イベントの後にしか起動しないからです。
のドキュメントにUserForm.ShowModal
は、「ユーザーフォームがモーダルの場合、ユーザーはアプリケーションの他の部分を使用する前に、情報を提供するかユーザーフォームを閉じる必要があります。ユーザーフォームが非表示になるかアンロードされるまで、後続のコードは実行されません。」
プロセスの実行中にユーザーがアプリケーションと対話するのを防ぐために、進行状況バーとしてモーダル UseForm を使用しようとしています。しかし、すべてのコードが UserForm_Activate プロシージャ内にある必要がある場合、これを達成するのは困難です。
ここで何か不足していますか?すべてのコード実行が で停止するのはなぜMe.Show
ですか?