- ベストアンサー
CommandButtonのEnterイベント後にフォーカスを移動する方法
- コマンドボタンのEnterイベント後に、フォーカスを移動する方法についての質問です。
- コマンドボタンのEnterイベントによってフォーカスが移動した後、同じ処理を実行するための方法を知りたいです。
- タブキーやエンターキーでコマンドボタンにフォーカスしても、クリックしたのと同じ処理を行い、指定の位置にフォーカスを移動する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 > 結果、textBox2ではなく、textBox1にフォーカスが移動してしまいました。 Windows XP Home・Excel2003/l2007のユーザーフォームにて、同じ動作に なることを確認しました。 確かに、BENGALさんが質問文で記述されているように、Enterイベントの 発生するタイミングが「フォーカス移動の直前」であるために、VBAでFocusを 設定した後に、Enter/Tabの入力が反映されてしまっているようです。 試行錯誤の末、一応、「TextBox2のExitイベントを制御するための変数を モジュールレベルで宣言」することにより、TextBox2にフォーカスを残すように できました・・・が、今度はコマンドボタンのクリックによる移動の場合に、 TextBox2から抜けるのに2回Enter/Tab/Clickが必要になってしまいました(汗) (Accessと違い、Excelのユーザーフォームでは、SetFocusによる移動時には Enterイベントが発生しないらしく、フラグが意図した通りに初期化されない) ともあれ、こちらで試したコードを以下に提示します: Option Explicit 'TextBox2のExitイベントを制御する変数を宣言 '(=TextBox2のExitイベントをキャンセルさせるためのフラグ) Private bolT2Hold As Boolean Private Sub CommandButton1_Enter() MsgBox "Ok" 'Exitイベントのキャンセルフラグをオンにする bolT2Hold = True TextBox2.SetFocus End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'フラグがオンの場合はExitイベントをキャンセルしてフォーカスを保持する Cancel = bolT2Hold 'フラグを初期化(TextBox2の編集後などにまでキャンセルされるのを回避) bolT2Hold = False End Sub CommandButton1で立てるフラグをTrue/Falseではなく時刻の記録とし、 「TextBox2のExitイベント発生時の時刻とほぼ同時ならキャンセル」と いうのも試してみましたが、Tabキーを押しっぱなしにした場合などの動作が 結局制御できていない状態になるため、断念しました(汗) 以上、中途半端な回答で申し訳ありませんが、参考まで。 (通常通り、コマンドボタンのクリック/コマンドボタン上でのEnterキー入力で 対応した方が、(特にExcelユーザーフォームでは)制御しやすそうです(汗))
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
「コマンドボタン上でのEnterキーの入力でコマンドボタンのClickイベントを」 ではなく、「コマンドボタンへの移動だけでコマンドボタンのClickイベントを」 というのは、かなり特殊な動きかと思います。 この特殊な動きをさせるのであれば、イベントへの動作の割り当ての仕方も、 特殊になることを覚悟した方がよさそうです。 ・・・ということで、 コマンドボタンのClickイベントには一切処理を置かず、 Clickで行おうとしていた全ての処理を、Enterイベントに割り当て とされてはいかがでしょうか。 (「コマンドボタンをマウスクリックした後、再クリック」したとしても、1回目の クリックで他のコントロールにフォーカス移動しているので、2回目のクリック でもコマンドボタンのEnterイベントはちゃんと発生してくれます) Private Sub CommandButton1_Enter() MsgBox "Ok" textBox2.SetFocus End Sub ※ご質問のアプリケーションが不明ですが、こちらはAccess2003で動作確認 しました。
お礼
ありがとうございます。 さっそく試してみました。 結果、textBox2ではなく、textBox1にフォーカスが移動してしまいました。 もしかしたら、各コントロールの設定によっても挙動が変わってくるのでしょうか。 こちらの環境をお伝えするのを忘れておりました。 Windows Vista home premium Excel2007 となります。
お礼
大変遅くなりまして申し訳ありません。 さらに、細かく調べて頂いてありがとうございます。 ご提示いただいた内容だけでも、納得な事が多く参考になりました。 ありがとうございます!