
コマンドボタンの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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
テキストボックス(VBA)でEnterを押したときに作動するマクロ
Access(アクセス)
-
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
エクセルVBA テキストボックスへのセットフォーカスについて
Visual Basic(VBA)
-
-
4
ユーザーフォームでTextBox1にカーソルを移動したい
Excel(エクセル)
-
5
どこにもフォーカスを当てたくない
Access(アクセス)
-
6
ユーザーフォームのSetFocusが働かない?
その他(プログラミング・Web制作)
-
7
VBA ユーザーフォーム ボタンクリック後にセルにフォーカス
Visual Basic(VBA)
-
8
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
9
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
10
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
11
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
12
VBA。複数のChangeイベントをまとめる方法
Visual Basic(VBA)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
15
テキストボックスのエンターキー無効
Visual Basic(VBA)
-
16
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
17
テキストボックス入力後、警告メッセージを表示し、フォーカスを移動させない方法について
Access(アクセス)
-
18
UserForm1.Showでエラーになります。
工学
-
19
任意で選択したセルをテキストボックスに表示
Excel(エクセル)
-
20
VBA TEXTBOXテキストボックスの文字の大きさが一定にならない。 ユーザーフォームでテキストボ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
GridViewでハイライトを使用し...
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
矢印(左右)キーでイベントを...
-
油性マジックで書いたサインを...
-
業務に差し支えのないテンキー...
-
excel ユーザーフォームのリス...
-
iPhoneってタッチIDとフェイスI...
-
アイソメトリックのイラストを...
-
テキストボックスの入力チェッ...
-
Accessの更新後処理で特定の条...
-
OPPO A54 5Gを使っています。 ...
-
全く喋ったことのない気になる人
-
VLCメディアプレイヤーでのコマ...
-
SPREAD(GrapeCity)のセルにフォ...
-
精神疾患持ちに日記を書いたら...
-
"判定"の英語表現について
-
トップページの上部の広告宣伝...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
他の人には声だして挨拶してる...
-
どこにもフォーカスを当てたくない
-
C# ReadOnlyのTextBoxで
-
ユーザーフォームのSetFocusが...
-
矢印(左右)キーでイベントを...
-
油性マジックで書いたサインを...
-
MFCでコンボボックスを選択不可...
-
業務に差し支えのないテンキー...
-
GridViewでハイライトを使用し...
-
エクセルVBA テキストボックス...
-
Accessの更新後処理で特定の条...
-
Private Sub内でSubをCallしたい
-
コマンドボタンのEnterイベント...
-
テキストボックス入力後、警告...
-
至急回答お願いします。 間違え...
-
油性マジックの消し方
-
VB.NET ボタン押下で一つ前の...
-
『エッジの効いた○○』の意味。
-
酸素ボンベのレギュレーターか...
-
小学校で遊ぶてんかのルールに...
おすすめ情報