Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2016)
テキストボックスの文字列の選択
投稿日時: 19/02/07 09:08:45
投稿者: pepej

おはようございます
初心者なんですが、ユーザーフォームで
↑矢印キーでtextbox2からtextbox1への移動と入っている文字列の選択をしたいのですが、
(textbox1とtextbox2は横並びです)
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
With TextBox1
    If KeyCode = vbKeyUp Then
        .SetFocus
        .SelStart = 0
        .SelLength = Len(.Value)
    End If
End With
End Sub
 
Private Sub TextBox1_Enter()
With TextBox1
    .SelStart = 0
    .SelLength = Len(.Value)
End With
End Sub
というコードを入れてもフォーカスの移動はするのですが、文字列が選択されません。
ご教授お願いします。

回答
投稿日時: 19/02/07 10:27:47
投稿者: Suzu

矢印キーでないとダメなのでしょうか?
 
すでに TEXTBOX にテキストが 入っているとして、
TABキーで、次のテキストボックスに移動し、
さらに移動先のテキストボックスのテキストを選んだ状態になります。
 
移動先のテキストボックスから、前のテキストボックスに移動するには
 Shift + TAB キー で前のテキストボックス移動 + 移動先テキスト全選択
 
となります。
 
でよければ、TABキー で対応可能で、マクロは不要と思います。

投稿日時: 19/02/07 10:31:53
投稿者: pepej

返信ありがとうございます。
できれば矢印キーでの移動がしたいです。
我儘すいません。

回答
投稿日時: 19/02/07 10:44:12
投稿者: WinArrow
投稿者のウェブサイトに移動

>TextBox2_KeyDown

TextBox2_KeyUp
に変更
 
TextBox1_Enter()プロシジャ不要
  

回答
投稿日時: 19/02/07 10:47:44
投稿者: WinArrow
投稿者のウェブサイトに移動

KeyDown を KeyUp に変更する理由
 
KeyDownのイベントの後に、必ず KeyUpイベントが発生するため。

投稿日時: 19/02/07 10:54:56
投稿者: pepej

ありがとうございます。
無事、出来ました。
しかし、なぜ矢印キーだとうまく選択されないのでしょうか?
F1キーだとちゃんと選択されたのですが。

回答
投稿日時: 19/02/07 11:44:59
投稿者: WinArrow
投稿者のウェブサイトに移動

pepej さんの引用:
ありがとうございます。
無事、出来ました。
しかし、なぜ矢印キーだとうまく選択されないのでしょうか?
F1キーだとちゃんと選択されたのですが。

 
どちらのレスに対応するかいとうかな?
因みに「F1」はヘルプキーなので、選択される?・・・おかしい?

投稿日時: 19/02/07 11:55:59
投稿者: pepej

WinArrow さんの引用:
>TextBox2_KeyDown

TextBox2_KeyUp
に変更
 
TextBox1_Enter()プロシジャ不要
  

ごめんなさい。こちらです。
ありがとうございます。
 
keycode = vbkeyupのkeyupの部分をF1やF9等に変えてみる、ということです。文章が下手ですいません。
 

回答
投稿日時: 19/02/07 13:29:59
投稿者: hatena
投稿者のウェブサイトに移動

pepej さんの引用:

しかし、なぜ矢印キーだとうまく選択されないのでしょうか?
F1キーだとちゃんと選択されたのですが。

 
↑矢印キーの入力が残っているからですね。
 
        .SelStart = 0 
        .SelLength = Len(.Value) 

 
で全選択したあとで、↑矢印キーの入力がテキストボックスに送信されますので、選択解除されて先頭にカーソルが移動します。
KeyCode = 0 でキー入力をキャンセルすれば、選択されたままです。
 
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 
With TextBox1 
    If KeyCode = vbKeyUp Then 
        KeyCode = 0
        .SetFocus 
        .SelStart = 0 
        .SelLength = Len(.Value) 
    End If 
End With 
End Sub 

投稿日時: 19/02/07 13:49:54
投稿者: pepej

WinArrow 様 hatena 様 
ありがとうございました。
色々と勉強になりました。