|
こんばんは。
簡単に再現方法
新規ブックにて ユーザーフォームを一つ作成してください(UserForm1)。
このUserForm1にコマンドボタンを二つ配置してください。
CommandButton1 ----本当にUserForm1を非表示にしてよいか確認する
CommandButton2 -----確認なしにUserForm1を非表示にする
このUserForm1のモジュールには、
Option Explicit
'=========================================================
Private Sub CommandButton1_Click()
Me.Hide
If MsgBox("本当に終了しますか", vbYesNo) = vbNo Then
Me.Show
End If
MsgBox "終了します"
End Sub
'=========================================================
Private Sub CommandButton2_Click()
Me.Hide
End Sub
標準モジュールに
'========================================================
Option Explicit
Sub test1()
UserForm1.Show
End Sub
再現手順
標準モジュールのtest1を実行してください。UserForm1が表示されます。
CommandButton1をクリックしてください。
一度、UserForm1が非表示になり、「本当に終了しますか」という確認メッセージが
表示されますので、「いいえ」をクリックしてください。
すると、再度UserForm1が表示されます。
ここで、今度は、CommandButton2をクリックしてください。
すると、不思議なことに「終了します」という
CommandButton2_Click()には、記述していないメッセージが表示されて
プログラムが終了します。
という現象ですよね?
これ、CommandButton2をクリック時のコードも記述しないと
どんな現象なのか再現できない可能性もありますね!!
これは、CommandButton1_Clickで記述している
Me.Show(UserForm1.Showでも同じ)、
これ正確には、
Call me.show
と記述しているのと同じです。
つまり、他のプロシジャーを呼び出していることになります。
当然、呼び出されたプロシジャーが終了すれば、
この
Call me.show の後に記述されているコードが実行されることになります。
呼び出されたプロシジャーが終了 のきっかけになるのが
Private Sub CommandButton2_Click()
Me.Hide
End Sub
にあたります。
非表示まま、イベントプロシジャーが終了しますから、
呼び出し元に制御が戻ります。
次投稿に続く
|
|