
コマンドボタンの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も見ています
-
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
どこにもフォーカスを当てたくない
Access(アクセス)
-
-
4
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
5
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
6
ユーザーフォームでTextBox1にカーソルを移動したい
Excel(エクセル)
-
7
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
エクセルVBAでマルチページの切り替え方法の件で
Excel(エクセル)
-
10
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
11
VBA ユーザーフォーム ボタンクリック後にセルにフォーカス
Visual Basic(VBA)
-
12
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
13
VBA:ユーザーフォームのマルチページに色を付けたい。
Word(ワード)
-
14
UserForm1.Showでエラーになります。
工学
-
15
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
16
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
19
エクセルVBAでテキストボックスに入力があった場合のみ、ワークシートに転記したい
Visual Basic(VBA)
-
20
Excel VBAでフォーカスを移動しない方法の続き
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームのSetFocusが...
-
iPhoneでサイレントモードにす...
-
テキストボックス入力後、警告...
-
どこにもフォーカスを当てたくない
-
他の人には声だして挨拶してる...
-
油性マジックの消し方
-
DateTimePicker のEnable
-
最高のホームページを作る
-
迷惑メールの来ないアドレス
-
Private Sub内でSubをCallしたい
-
エクセルVBA テキストボックス...
-
F503iにSVって表示されてるんで...
-
油性マジックで書いたサインを...
-
業務に差し支えのないテンキー...
-
C# ReadOnlyのTextBoxで
-
アンカータグで移動後のURLに含...
-
GridViewでハイライトを使用し...
-
三菱シーケンサで時計制御(時...
-
Accessの更新後処理で特定の条...
-
プログラムからTera Termに文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
他の人には声だして挨拶してる...
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
矢印(左右)キーでイベントを...
-
業務に差し支えのないテンキー...
-
Private Sub内でSubをCallしたい
-
エクセルVBA テキストボックス...
-
GridViewでハイライトを使用し...
-
テキストボックス入力後、警告...
-
プログラムからTera Termに文字...
-
コマンドボタンのEnterイベント...
-
MFCでコンボボックスを選択不可...
-
VB.NET ボタン押下で一つ前の...
-
油性マジックで書いたサインを...
-
Accessの更新後処理で特定の条...
-
DateTimePicker のEnable
-
スプレットシートでフォーカス...
-
VC++2010のラジオボタンの選択...
-
油性マジックの消し方
おすすめ情報