• 締切済み

VBA イベント Exit時にボタンを有効にしたい

VBAで イベント _Exit(ByVal Cancel As MSForms.ReturnBoolean)が有効(Cancel=True)の場合、ボタンが有効にならない。 例えば、「閉じる」ボタンを押下するとフォームを閉じたいが _Exitの処理が実行される。 _Exit処理を強制終了し ボタンを有効にできるでしょうか?

みんなの回答

noname#144013
noname#144013
回答No.1

こんにちは。 すみません、いまいち仰っている状況が把握できていないのですが、 例えば、下記のようなことでしょうか?(勘違いでしたらすみません) フォームに以下のようなコントロール   テキストボックス1 …………… TextBox1   テキストボックス2 …………… TextBox2   コマンドボタン1   …………… CommandButton1   コマンドボタン2(閉じる)  …… CommandButton2 を配置した状態で、   '===テキストボックス1のExitイベント処理   Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)     Cancel = True  '他のコントロールへのフォーカス移動を禁止   End Sub   '===「閉じる」ボタンのクリックイベント処理   Private Sub CommandButton2_Click()     Unload Me  'フォームを閉じる   End Sub のように記述して、テキストボックス1にフォーカスがある状態の時に、他のコントロールに フォーカスが移動できないようにしてある。 この状態で、テキストボックス1にフォーカスがある状態でも、「閉じる」ボタンのクリックを 有効にしてフォームを閉じたい。 →ここままだと、他へのフォーカス移動が禁止され、「閉じる」ボタン等の操作もできない  ので、それを回避する方法を知りたい。 といったようなことでしょうか? -------------------- だとした場合、Exitイベント内で、何らかの方法で、次のフォーカス移動先が「閉じる」ボタン であるということが取得できれば、Cancel=True を実行せずに、「閉じる」ボタンの有効化が 可能かもしれませんが、そのような方法があるかどうか判りません。(すみません。) 代替案ですが(Exitイベントを使用しない方法として)、 対象のコントロール(今回Exitイベントを設定しているコントロール)と「閉じる」ボタン以外の 他のコントロールの操作を無効化できれば良いのであれば、他のコントロールのEnabled プロパティ を False にして操作を無効化する方法は如何でしょうか? 例えば、前述のフォーム例の場合、フォームのInitializeイベントに、   Private Sub UserForm_Initialize()     TextBox1.Enabled = True       'テキストボックス1の操作を有効化     CommandButton2.Enabled = True  'コマンドボタン2(閉じる)の操作を有効化     TextBox2.Enabled = False       'テキストボックス2の操作を無効化     CommandButton1.Enabled = False  'コマンドボタン1の操作を無効化   End Sub と記述して、各コントールの操作の有効/無効を設定するのはどうでしょう。 フォームの操作途中で、各コントロールの有効/無効状態を切替えたい場合は、適当な イベント処理等で、各コントロールのEnabled プロパティを変更すれば良いと思います。 以上、参考になれば幸いです。(的外れだった場合はすみません)

関連するQ&A