コマンドボタンのEnterイベント後に、フォーカスを移動したい。
フォームに「TextBox1」(TabIndex=0)「TextBox2」(TabIndex=1)「CommandButton1」(TabIndex=2)の3つのコントロールがある場合。
CommandButton1がクリックされた場合も、TextBox2からCommandButton1に、タブキーまたはエンターキーで、フォーカスが移った場合にも、同じ処理を行い、処理結果によってTextBox1やTextBox2にフォーカスを移したいと考えています。
以下のようなサンプルを作成しました。
Private Sub CommandButton1_Enter()
CommandButton1_Click
End Sub
Private Sub CommandButton1_Click()
MsgBox ("OK")
TextBox2.SetFocus
End Sub
この場合、CommandButton1_Enterのイベントが起こった場合、CommandButton1_Click()のTextBox2.SetFocusは効きません。
(正確には、CommandButton1_Enterイベントが終わった時点で無効でしょうか。)
Enterイベントは、フォーカスが移動する前に発生するため、このイベントが終わった後に、そもそもの動作に戻り、フォーカス移動が発生してしまうからなのだと思っております。
要は、コマンドボタンにタブキーやエンターキーでフォーカスしても、コマンドボタンをクリックしたのと同じ処理を行い、所定の位置にフォーカスを持っていきたいのですが、どのように行えば良いか、わからない状況です。
よろしくお願いいたします。
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ユーザーフォームでは)制御しやすそうです(汗))
大変遅くなりまして申し訳ありません。
さらに、細かく調べて頂いてありがとうございます。
ご提示いただいた内容だけでも、納得な事が多く参考になりました。
ありがとうございます!
No.1
- 回答日時:
「コマンドボタン上での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
となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) micro soft teamsのカメラ設定について 1 2023/05/25 18:07
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) エクセルのバージョン2016フリーズ改善策 5 2022/12/13 09:13
- Excel(エクセル) 表内で、Enterキーで横→行の最後入力したら次の行の先頭に移動するマクロを作りたい 3 2022/05/01 21:19
- Access(アクセス) Access の SetFocus について教えてください 5 2022/08/04 07:32
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- 一眼レフカメラ 一眼レフ Canon 5D mark4 の4K動画撮影 ピントが背景に持っていかれる 2 2023/05/10 22:52
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
どこにもフォーカスを当てたくない
Access(アクセス)
-
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
-
4
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
5
ユーザーフォームでTextBox1にカーソルを移動したい
Excel(エクセル)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
8
テキストボックスのエンターキー無効
Visual Basic(VBA)
-
9
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
10
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
11
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
12
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
13
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
14
エクセルVBAでフォームのListboxをスクロールするには?
その他(Microsoft Office)
-
15
テキストボックスのvalueとtextの違い
Visual Basic(VBA)
-
16
テキストボックスのフォーカスの判定
Visual Basic(VBA)
-
17
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
18
ExcelVBAのユーザーフォームの中に線を引きたい
Visual Basic(VBA)
-
19
エクセルでエラーが出て困っています。
Excel(エクセル)
-
20
エクセル TABキーの動きをマクロで
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
エクセルVBA テキストボックス...
-
C# ReadOnlyのTextBoxで
-
Accessの更新後処理で特定の条...
-
フォーカスを移動させない方法
-
他の人には声だして挨拶してる...
-
業務に差し支えのないテンキー...
-
スプレットシートでフォーカス...
-
GridViewでハイライトを使用し...
-
コマンドボタンのEnterイベント...
-
ガードレールの高さについて
-
ユーザーフォームのSetFocusが...
-
VBAのExitイベントについて
-
質問失礼します I hate how med...
-
VB.NET ボタン押下で一つ前の...
-
矢印(左右)キーでイベントを...
-
テキストボックスの入力チェッ...
-
VC++2010のラジオボタンの選択...
-
タブコントロールについて
-
エコトノハのような遊び心のあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
業務に差し支えのないテンキー...
-
エクセルVBA テキストボックス...
-
他の人には声だして挨拶してる...
-
ユーザーフォームのSetFocusが...
-
矢印(左右)キーでイベントを...
-
コマンドボタンのEnterイベント...
-
GridViewでハイライトを使用し...
-
テキストボックス入力後、警告...
-
VBAでのユーザーフォーム上...
-
Private Sub内でSubをCallしたい
-
フォーカスを移動させない方法
-
小学校で遊ぶてんかのルールに...
-
炊飯器のセットの音と出来上が...
-
Accessの更新後処理で特定の条...
-
VB.NET ボタン押下で一つ前の...
-
『エッジの効いた○○』の意味。
-
油性マジックの消し方
-
タブコントロールのフォーカス...
おすすめ情報