Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


14125 / 76734 ←次へ | 前へ→

【68108】Re:UserForm.Hide→Show後の処理
発言  ichinose  - 11/2/2(水) 21:16 -

引用なし
パスワード
   こんばんは。
簡単に再現方法

新規ブックにて ユーザーフォームを一つ作成してください(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

にあたります。

非表示まま、イベントプロシジャーが終了しますから、
呼び出し元に制御が戻ります。

次投稿に続く

2 hits

【68106】UserForm.Hide→Show後の処理 ボビー 11/2/2(水) 17:28 質問
【68108】Re:UserForm.Hide→Show後の処理 ichinose 11/2/2(水) 21:16 発言
【68109】Re:UserForm.Hide→Show後の処理 ichinose 11/2/2(水) 21:26 発言
【68110】Re:訂正 ichinose 11/2/2(水) 21:33 発言
【68121】Re:訂正 ボビー 11/2/3(木) 11:39 お礼

14125 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free