実行に時間がかかる関数があります。
関数の開始時に表示する小さなモーダルフォームを作成して、関数の終了時に閉じるにはどうすればよいですか?
このための私のお気に入りのトリックは、実行中のコードを、実行中に表示されるフォームに配置することです。それが終わったら、UnloadMeを呼び出します
'Code in Form1
Call frmWait.Show(vbModal, Me)
'Code in frmWait
Private Sub Form_Activate()
'Do some work ...
Unload Me
End Sub
frmModal が表示したいフォームだとします。関数の開始時に
frmModal.Show
frmModal.refresh
関数の最後に入れます
Unload frmModal
フォームモーダル(form1.show vbmodal)をロードすると、モデルフォームが閉じられるまで後続のコードは実行されません。
必要なものをシミュレートする簡単な方法(APIなし)は、フォームをモードレスで表示し、他のフォームを一時的に無効にすることです。
次のテストプロジェクトのcommand1とcommand2の違いを見てください。
'3 forms :
' Form1 : name=Form1
' contains 2 command buttons with the name Command1 and Command2
' Form2 and Form3 contain nothing special
Option Explicit
Private Sub Command1_Click()
Dim lngEnd As Long
Form3.Show vbModal
lngEnd = Timer + 5
Do While Timer < lngEnd
Caption = CStr(Timer)
DoEvents
Loop
Unload Form3
End Sub
Private Sub Command2_Click()
Dim lngEnd As Long
Enabled = False
Form2.Show vbModeless, Me
lngEnd = Timer + 5
Do While Timer < lngEnd
Caption = CStr(Timer)
DoEvents
Loop
Enabled = True
Unload Form2
End Sub