VBAでKeyDownイベント後の、SetFocusイベントについて教えてください。
tsucyuさん
2012/5/1323:22:52
VBAでKeyDownイベント後の、SetFocusイベントについて教えてください。
TextBoxに文字が入力されて、Enterキーが押されたら
処理を行い、再度TextBoxにカーソルが行くように
いたいのですが、うまくいきません。
(次のTabstopの部分にFocusが移っています)
TextBoxのKeyDownイベント後に処理を行い、
TextBoxに対してSetFocusイベントを実行しても、
カーソルが移動しませんでした。
SetFocusのヘルプには下記の記述がありました。
この記述で「特に指定しない限り」とありますが、
その「指定する」方法を知りたいのですが、
ヘルプからはわかませんでした。
※回避策としてEnterキー入力時に実行する処理の
最後で、FormのHideとShowを行っています。
この方法では、処理を繰り返すと
「スタック領域が不足しています」との
エラーとなってしまいます。
---------SetFocusのヘルプ(ここから)---------
解説
フォーカスの移動に失敗すると、フォーカスは元のオブジェクトに
戻り、エラーが発生します。
特に指定しない限り、コントロールにフォーカスを設定しただけでは、
そのコントロールがあるウィンドウがアクティブになることは
ありません。
また、そのコントロールが別のコントロールの前面に表示されること
もありません。
---------SetFocusのヘルプ(ここまで)---------
以下に、イベントを拾う部分を記述します。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then 'Enterキーが押された
Call UpdateRecord '標準モジュールの更新または追加の処理を実行する
' UserForm1.ZOrder (fmTop)
UserForm1.TextBox1.SetFocus
End If
End Sub
補足ありがとうございます。動作しました。
SendKeys "+{TAB}" で回避していましたが
ご教示の方法、すっきりします。
KeyCode = 0 はなにのための操作でしょうか。
ここだけがわかりませんでした。
- 閲覧数:
- 4,449
- 回答数:
- 1
- お礼:
- 25枚
ベストアンサーに選ばれた回答
ja7awuさん
編集あり2012/5/1500:33:02
--- 補足に対して---
> 動作しました。
そうですか。 良かったですね。
> KeyCode = 0 はなにのための操作でしょうか。
KeyCode = 0 ' <---- は Returnコードを無効にしてフォーカスをそのままにしています。
これが無いとコントロール内にカーソルが行かないようです。
---------------------------
こんな感じにすると如何でしょうか?
動作確認は2003ですが・・・
Private Sub Textbox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Then
Me.TextBox1.Visible = False
Me.TextBox1.Visible = True
If TextBox1 = "" Then
MsgBox "入力データがありません", vbExclamation
Else
MsgBox Me.TextBox1.Value & " が入力されました。", vbInformation
End If
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = 0 ' <-- カーソル先頭時
KeyCode = 0
End If
End Sub
この質問につけられたタグ
気になる人がいます
回答受付中の質問