- ベストアンサー
エクセルVBAのテキストボック、Exitイベント
- エクセルVBAを使用して、テキストボックスのExitイベントを設定する方法について教えてください。
- フォームのテキストボックスに入力した値をエクセルシートに展開するマクロを作成していますが、製品コード未入力時にフォームを閉じることができなくなります。回避方法はありますか?
- Exitイベントを使用せずに、フォーカスを移動させずにフォームを閉じる方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Unloadステートメントを記述しているCommandButtonの TakeFocusOnClickプロパティをFalseに設定してください。 プロパティウィンドウで設定してもいいし、 UserForm_Initializeイベントで設定してもいいです。 Private Sub UserForm_Initialize() Me.CommandButton1.TakeFocusOnClick = False End Sub あとはmySeiCD_Exitの冒頭に下記1行を追記すると良いかと。 If Not Me.Visible Then Exit Sub
その他の回答 (2)
- GOCHISOUda
- ベストアンサー率34% (50/144)
ユーザーフォームのアクティベイトイベントで始めのテキストボックスをセットフォーカス。 2番目のテキストボックスではエンターイベントを使って、1番目のテキストボックスが空だったら1番目にセットフォーカス。そうでなかったら2番目にセットフォーカスと書く。 3番目も2番同様だけれど、いきなり3番目を選択するとエラーを起こすかもなので、3番目は1番目も確認するように書く。 出来ますよ。
お礼
ご回答頂きありがとうございました。 今後のプログラミングの参考に致します。
- いけだ ひろし(@ike-2000)
- ベストアンサー率53% (69/129)
VBで同様のことを行いました。 VBAのイベント順序の仕様でExitでは不可能で、Enter側でエラーチェックするしかないと考えます。 汎用的には以下のような処理を作りこむ必要があります。 (1)Exit側 当該コントロールを記録する。 どのようなチェックを行うかの情報を記録する。 チェックする値を記録する。 (2)Enter側 (2)-1 エラーチェックが不要のコントロール(キャンセルボタン等) 記録されている情報チェックせず、当該コントロールの処理を行う。 (2)-2 エラーチェックが必要な場合(普通のテキストボックス等) 記録されているチェック情報に従い値をチェックする。 エラーがあれば記録されているコントロールに制御を移す。 エラーが無ければ当該コントロールの処理をする。 結構面倒です。 私の場合、VB4でソースを編集することが出来たので、プリプロセッサを作って、LostFocus、GotFocusに必要なコードを自動生成させました。開発量が大きかったので選択できた方法です。 質問者殿の開発規模が不明なのでこの方法がよいのか分かりません。 Exit等でダイナミックにチェックする必要がないのであれば、 「確認ボタン」を新たに設け、この確認ボタンをクリックした時、全てをチェックし、エラーのコントロールに制御を移す、 というのが楽なのではないでしょうか。
お礼
ご回答頂きありがとうございました。 今後のプログラミングの参考に致します。
お礼
私がやりたいと思っていた動作が実現できました。 If Not Me.Visible Then Exit Sub の振る舞いがいまひとつ理解できていませんが、勉強したいと思います。 ありがとうございました。