[[20180620145610]] 『ユーザーフォームの動作について』(まいろねふ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ユーザーフォームの動作について』(まいろねふ)

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 >


>閉じたら次の処理へ進む
1個目のユーザーフォームに、閉じられたというイベントがあると思うので、
そこに次の処理を書いてはいかがですか?
そうすると、モーダル、モードレス関係なく閉じたら次、
閉じたら次とリレーしていけると思います。

(まっつわん) 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


すいません。Enterイベントを、「Enterキーが押された時に動くイベント」と誤認していた事が原因でした。
実際はKeyDownイベントでKeyCodeがvbKeyReturnの場合にHideするのが正解でした。
(まいろねふ) 2018/06/20(水) 17:12

ん?、私ではない???さんが…。

KeyCodeという事は、テキストボックスのキー押下で処理しているのでしょうか。 その場合、ENTERキーを押しっぱなしにするとどうなるか確認してみてください。他にフォーカスが移らない場合は、連続してイベント発生してしまうので、KeyUpイベントを使う方が安全だったりしますよ。
(???) 2018/06/20(水) 17:35


コメント返信:

[ 一覧(最新更新順) ]


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