- 締切済み
VBA イベント Exit時にボタンを有効にしたい
VBAで イベント _Exit(ByVal Cancel As MSForms.ReturnBoolean)が有効(Cancel=True)の場合、ボタンが有効にならない。 例えば、「閉じる」ボタンを押下するとフォームを閉じたいが _Exitの処理が実行される。 _Exit処理を強制終了し ボタンを有効にできるでしょうか?
- みんなの回答 (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 プロパティを変更すれば良いと思います。 以上、参考になれば幸いです。(的外れだった場合はすみません)