TextBoxの文字列を選択する


パスワードを入力するUserFormを作ったとします。正しいパスワードは「1234」としましょう。[OK]ボタンをクリックされたら、TextBox1に入力された文字列が「1234」かどうかを判定します。[OK]ボタンのClickイベントに次のようなコードを記述しました。

Private Sub CommandButton1_Click()
    If TextBox1 <> "1234" Then
        MsgBox "パスワードが違います。", 16
    End If
End Sub

もちろん、これでも間違いはありません。プログラムとしては正常に機能しています。ただ、MsgBoxをクリックして閉じた後、フォーカスが[OK]ボタンに残ってしまいます。

ユーザーが誤ったパスワードを入力し直すには、TextBox1をクリックするなどしてフォーカスを移し、すでに入力されている文字列を削除しなければなりません。あまり使いやすくありません。ここはひとつ、誤ったパスワードを自動的に選択状態にしましょう。

Private Sub CommandButton1_Click()
    If TextBox1 <> "1234" Then
        MsgBox "パスワードが違います。", 16
        With TextBox1
            .SetFocus
            .SelStart = 0
            .SelLength = Len(TextBox1)
        End With
    Else
        MsgBox "正しいパスワードです。", 64
    End If
End Sub

まず、フォーカスをTextBox1に移動するにはSetFocusメソッドを使います。

次に、TextBox1内の文字列をすべて選択状態にします。これには、いくつかのコマンドを使います。

SelStartプロパティは、TextBox1内の「何文字目」から選択状態にするかを指定します。SelLengthプロパティは「何文字分」を選択状態にするかを指定します。今回のケースでは、TextBox1内のすべての文字列を対象にしますので、TextBxox1の先頭から選択状態にします。つまり「0文字目」です。そして「選択する文字数=TextBox1に入力されている文字数」になりますので、文字数を数えるLen関数を使って文字数を取得しています。