[[20251209102823]] 『ユーザーフォームの表示方法について』(栗栄太) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『ユーザーフォームの表示方法について』(栗栄太)

1.新規にブックを作成する
2.test.xlsm で保存する
3.ユーザーフォームを3つ(UserForm1,UserForm2,UserForm3)を追加する
4.UserForm1にボタンを2つ追加して
  以下のコードを追加

    Private Sub CommandButton1_Click()
        UserForm1.Hide
        UserForm2.Show
        UserForm1.Show vbModeless
    End Sub

    Private Sub CommandButton2_Click()
        UserForm1.Hide
        UserForm3.Show
        UserForm1.Show vbModeless
    End Sub
5.標準モジュールを1つ(Module1)追加する
6.標準モジュールに以下のコードを追加
      Public Sub test()
          UserForm1.Show vbModeless
      End Sub

この状態でボタン1を押してUserForm2を表示させ
ボタン2を押してUserForm3を表示させます。
この場合は正常に各フォームを表示した後
終了するとUserForm1が表示されます。

ところが、
UserForm2にラベルを貼り付けると
CommandButton1をクリックしてUserForm2を
表示しUserForm1が表示されずに終了してしまいます。
CommandButton2をクリックしてUserForm3を
表示した後はUserForm1が表示されます。
UserForm1を表示させたままにするにはどうすればいいですか?

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


おはようございますぅ (*^^*)
詳しくはわかりませんが
モーダルで処理すればうまく行くような気がしないでもありませんです。

。。。^^:

m(__)m
(隠居Z) 2025/12/09(火) 11:09:51


 やってみました。再現しました。

 姑息的対策ですが、
    Private Sub CommandButton1_Click()
        UserForm1.Hide
        UserForm2.Show
        DoEvents               ' ここに DoEvents なんなら3,4回 
        UserForm1.Show vbModeless
    End Sub
 でどうでしょう
(´・ω・`) 2025/12/09(火) 11:22:28

(隠居Z)さん
ありがとうございます。
標準モジュールでモーダルで
UserForm1 を呼び出しましたがだめでした。
逆に
UserForm1のボタン処理で
UserForm2,UserForm3をvbModelessで呼び出すと
消えなくはなりましたが、
もともとの仕様と変わってくるので
vbModelessを消して元の状態にしたのですが、
元に戻してもこれ以降は消えなくなりました

(´・ω・`)さん
ありがとうございます。
上記の消えなくなった状態になったので
再度作り直して消える状態にしました。
そして確認しました。
DoEvents を入れるだけで消えなくなりました。
ここで、前回のこともあり、
再度 DoEvents を削除して元の状態に
戻して確認すると、
やはり、消えない状態になりました。

以上2つのことから
一度、vbModeless に設定するか
doevents を入れて実行させてやると
そのあとは元に戻しても消えることはなくなる
ということです。
内部的に何かが変わっているのだと思われます。
もしわかる方がいれば
教えてください。

ありがとうございました。

(栗栄太) 2025/12/09(火) 13:32:15


ただ単にOS側の処理が追い付いていないだけかと
(論理) 2025/12/09(火) 14:30:22

 私はわからないひとですが、一応書いておきます。

 動作を確認するためにMsgBoxを挟んだらたまたま上手くいったので、
 DoEvents でもいけるだろうと思ったら上手くいったという流れなので、
 なぜ上手くいくのかよく分かりません

 そもそも
 >UserForm2にラベルを貼り付けると
 挙動が変わること自体がよく分かりません。何が変わったのでしょうね

 分からないことばかりです。MicroSoftに問い合わせてみてはどうでしょう
(´・ω・`) 2025/12/09(火) 14:51:34

UserForm1.Hide とする理由が分かりませんけど。
ユーザーフォームを開くだけなら
    Private Sub CommandButton1_Click()       
        UserForm2.Show       
    End Sub
    Private Sub CommandButton2_Click()        
        UserForm3.Show       
    End Sub
でいいんじゃないですか。

(マクロ苦手) 2025/12/09(火) 16:49:46


(´・ω・`)さん
ありがとうございます。
わからないことが多いですが、
とりあえずはどうさしているので、DoEvent使っておきます。

(マクロ苦手)さん
ありがとうございます。
UserForm1,UserForm2またはUserForm3が表示されている状態で
UserForm1が使用できないのに表示されているとボタンが押せないとかいわれるので
消しています。
(栗栄太) 2025/12/15(月) 08:16:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.