• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コマンドボタンのEnterイベント後に、フォーカスを移動したい。)

CommandButtonのEnterイベント後にフォーカスを移動する方法

このQ&Aのポイント
  • コマンドボタンのEnterイベント後に、フォーカスを移動する方法についての質問です。
  • コマンドボタンのEnterイベントによってフォーカスが移動した後、同じ処理を実行するための方法を知りたいです。
  • タブキーやエンターキーでコマンドボタンにフォーカスしても、クリックしたのと同じ処理を行い、指定の位置にフォーカスを移動する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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ユーザーフォームでは)制御しやすそうです(汗))

BENGAL
質問者

お礼

大変遅くなりまして申し訳ありません。 さらに、細かく調べて頂いてありがとうございます。 ご提示いただいた内容だけでも、納得な事が多く参考になりました。 ありがとうございます!

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

「コマンドボタン上でのEnterキーの入力でコマンドボタンのClickイベントを」 ではなく、「コマンドボタンへの移動だけでコマンドボタンのClickイベントを」 というのは、かなり特殊な動きかと思います。 この特殊な動きをさせるのであれば、イベントへの動作の割り当ての仕方も、 特殊になることを覚悟した方がよさそうです。 ・・・ということで、   コマンドボタンのClickイベントには一切処理を置かず、   Clickで行おうとしていた全ての処理を、Enterイベントに割り当て とされてはいかがでしょうか。 (「コマンドボタンをマウスクリックした後、再クリック」したとしても、1回目の  クリックで他のコントロールにフォーカス移動しているので、2回目のクリック  でもコマンドボタンのEnterイベントはちゃんと発生してくれます) Private Sub CommandButton1_Enter()   MsgBox "Ok"   textBox2.SetFocus End Sub ※ご質問のアプリケーションが不明ですが、こちらはAccess2003で動作確認  しました。

BENGAL
質問者

お礼

ありがとうございます。 さっそく試してみました。 結果、textBox2ではなく、textBox1にフォーカスが移動してしまいました。 もしかしたら、各コントロールの設定によっても挙動が変わってくるのでしょうか。 こちらの環境をお伝えするのを忘れておりました。 Windows Vista home premium Excel2007 となります。

関連するQ&A