こんにちは、Ryoです。
VBAで扱うことが多いユーザーフォームとテキストボックスですが、用途などによってはテキストボックス上の文字列を全選択状態にして消去や再入力時の手間を省きたいことがあると思います。今回はその内容について書いていきます。
1.サンプル概要
サンプルコードを実行するとUserForm1が立ち上がり、TextBox1に「Sample Text」の文字を表示させています。フォーカスは初期で「CommandButton1」にセットしています。
テキストボックス内の文字列が全て選択されるのはTextBox1がフォーカスを取得した時なので、「TAB」キー等でTextBox1にフォーカスを移動させると、下の画像のように全ての文字列が選択されます。
再度「TAB」キーを押してフォーカスをCommandButton1に移動させると、文字列選択は解除されます。
フォーカスが移動しても文字列選択を保持したい場合、HideSelectionプロパティを使用すれば選択状態を維持することもできます。
ちなみに使用するUserForm構成はこの通りです。
これらの内容について、以下にサンプルコードなどを書いていきます。
2.サンプルコード
Private Sub UserForm_Initialize() '**ユーザーフォーム初期処理** 'TextBox1に対して処理を実行する With TextBox1 'TextBox1に文字を入力 .Text = "Sample Text" 'フォーカスを取得したら文字列を選択する .EnterFieldBehavior = fmEnterFieldBehaviorSelectAll '**参考** 'HideSelectionプロパティを「False」設定することで 'フォーカスが他へ移っても選択状態を保持することが可能 '構文:オブジェクト.HideSelection = expression(True/False) '.HideSelection = False End With '本サンプルの動作確認用としてユーザーフォーム初期時に 'コマンドボタン1にフォーカスをセット UserForm1.CommandButton1.SetFocus End Sub
TextBox1でフォーカスを取得した際に文字列を全て選択させていますが、それを行うにはEnterFieldBehaviorプロパティを使用します。
構文:オブジェクト.EnterFieldBehavior=expression
このプロパティに値を設定することで、フォーカスを取得した際に文字列を選択するかどうかを指定します。
定数 | 内容 |
fmEnterFieldBehaviorSelectAll | 文字列全てを選択 |
fmEnterFieldBehaviorRecallSelection | コントロールが最後にアクティブだった時の状態に従う |
サンプルコードでは文字列を全て選択するので定数はfmEnterFieldBehaviorSelectAllを使用していますが、もう一つのfmEnterFieldBehaviorRecallSelectionについて簡単に説明します。
定数のfmEnterFieldBehaviorRecallSelectionは実行してみるとわかりやすいのですが、例えばTextBox1の文字でTextのみを選択しておきます。
その状態で「TAB」キーでフォーカスをCommandButton1に移動させます。
再度「TAB」キーでTextBox1にフォーカスを移動させると、最初に手動で選択した範囲が再現されるということですが、おそらく利用頻度的にはfmEnterFieldBehaviorSelectAllが高いと思います。
このようにフォーカス移動で文字列選択することが可能ですが、UserForm1の処理としてはフォーム初期化時の処理とするので、Private Sub UserForm_Initialize()で記述します。
記述内容自体はシンプルで、処理を行いたいTextBox1に対し、EnterFieldBehaviorプロパティを利用するので、TextBox1.EnterFieldBehavior = fmEnterFieldBehaviorSelectAllとすればOKです。
コメント文で**参考**としているHideSelectionプロパティはFalse設定することでフォーカスが外れても文字列選択状態を維持してくれるものなので、コメントを解除すればサンプル概要で示した動作になります。
後はサンプル動作を確認しやすくする為に初期的にフォーカスをコマンドボタンにセットしますのでUserForm1.CommandButton1.SetFocusとしています。
以上がサンプルコード内容になります。
3.まとめ
ユーザーフォームは便利なので何かと扱う機会も多いですから、今回のような内容を知っておくと使い勝手の幅が広がるのではないかと思います。
記述自体もそれほど難しいこともないので、利用機会があればご検討くださいませ。
以上、フォーカス移動で全文字列を選択する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo