| 
    
     |  | こんばんは。 簡単に再現方法
 
 新規ブックにて ユーザーフォームを一つ作成してください(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
 
 にあたります。
 
 非表示まま、イベントプロシジャーが終了しますから、
 呼び出し元に制御が戻ります。
 
 次投稿に続く
 
 
 |  |