ここから本文です

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

質問した人からのコメント

2012/5/15 01:27:16

降参 ありがとうございました。
早速、ご教示いただいた方法に切り替えています。
フォーカスのセットなどあまり考えたことがなかったのですが、
ユーザインターフェースとして重要だということがよくわかった
今回のフォームでした。勉強になりました。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

お得情報

Tポイントをためるなら、この1枚!
Yahoo! JAPANカード≪年会費永年無料≫
最大7,000円相当のTポイントもらえる

その他のキャンペーン

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。