[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『ユーザーフォームの動作について』(まいろねふ)
VBAでユーザーフォームを表示し、閉じたら次の処理へ進む、という動作を実現したいのですが、実際には閉じる前に進んでしまいます。
Sub test()
<処理1>
Form1.Show vbModal
<処理2>
If Form1.isCancel = True Then <処理3> End If
End Sub
上記のコードでForm1を表示すると、実際にはForm1を閉じる前に処理2へ進んでしまう様です。
モーダル制御はフォームからフォームを呼び出した時しか効かないのでしょうか。
もうひとつ、Form1が閉じる際に×ボタンが押されたかどうか判定するため、
Form1に以下の様なコードを書いたのですが、実際に×をクリックして閉じても
isCancelはTrueにならず、上記コードの処理3には進みません。
Public isCancel As Boolean
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
isCancel = True End Sub
Form1上のリストボックスの選択状態は呼び出し元から取れるのに、変数の値が正しく取れないのは何故でしょうか。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(まっつわん) 2018/06/20(水) 15:26
読解力が無くて申し訳ないのですが、「1個目のユーザーフォーム」とはForm1の事でしょうか。
Form1はリストボックスから選択するだけのシンプルなフォームですが、そこで選択した内容を
後の処理で使うので、Form1のイベントに処理を書くわけにはいかないのです。
できればメッセージボックスの様に、選択するか閉じるまで絶対に次の処理へ進まない様にしたいのです。
(まいろねふ) 2018/06/20(水) 15:36
>実際には閉じる前に進んでしまいます。
本当?
2016を持ってないので、2013でやった限りはそんなことなかったです。 そうじゃないと、何の為の vbModal か分からなくなります。
何を以て先に進んだと分かったんですか?
私は、こんな風にやったら、 ↓ Form1.Show vbModal MsgBox "勝手に進んだ"
ユーザーフォームを閉じる前に、勝手に進んだと言うメッセージが出なかったので 勝手に進んでいないと判断しましたが・・
(半平太) 2018/06/20(水) 16:09
試しに空のフォームを作って同様に表示してみたら、閉じるまで先へ進みませんでした。
Form1の方に問題があり、具体的にはForm1上のリストボックスでEnterキーが押されたら
Form1をHideする処理があり、それをコメントアウトしたら進まなくなりました。
しかし実際にはEnterキーは押しておらず、更にフォームも表示されたままになっているので
何故そうなるのかは依然として謎です・・・
(まいろねふ) 2018/06/20(水) 16:30
本当に解決したいならですが。
(???) 2018/06/20(水) 17:02
KeyCodeという事は、テキストボックスのキー押下で処理しているのでしょうか。 その場合、ENTERキーを押しっぱなしにするとどうなるか確認してみてください。他にフォーカスが移らない場合は、連続してイベント発生してしまうので、KeyUpイベントを使う方が安全だったりしますよ。
(???) 2018/06/20(水) 17:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.