即効テクニック

ユーザーフォーム関連のテクニック

TextBox内のテキストを選択する

(Excel 97/2000/2002/2003/2007)
ユーザーからパスワードを入力してもらうようなUserFormがあったとします。
UserForm上にはテキストボックスとコマンドボタンが1つずつ配置されています。
コマンドボタンがクリックされたら、入力されたパスワードが正しいかどうか判定します。
ここでは、正しいパスワードが"Password"だとします。
コマンドボタンに登録するマクロは、次のようになります。

Private Sub CommandButton1_Click()
  If TextBox1.Text = "Password" Then
    MsgBox "OK"
  Else
    MsgBox "パスワードが間違っています"
  End If
End Sub   
判定するだけなら、これでもいいですね。 しかし、もしユーザーがパスワードを打ち間違えたとき、ただ「間違っています」とメッセージを表示するだけでは、使い勝手の良いシステムとは言えません。 ユーザーが正しいパスワードを入力し直すには、もう一度テキストボックスをクリックしてアクティブにし、先に入力した誤ったパスワードを削除し、新たに正しいパスワードを入力しなければいけません。 一般的なWindowsのアプリケーションでは、こんなとき、自動的にテキストボックスへフォーカスが移り、それまで入力されていた文字列が選択状態になります。 この仕組みを実現してみましょう。 テキストボックスにフォーカスを移すには、SetFocusメソッドを使います。
Private Sub CommandButton1_Click()
  If TextBox1.Text = "Password" Then
    MsgBox "OK"
  Else
    MsgBox "パスワードが間違っています"
    TextBox1.SetFocus
  End If
End Sub   
次に、テキストボックスに入力された文字列全体を選択状態にします。 テキストボックス内の文字列を選択状態にするには、次のプロパティを使います。 SelStartプロパティ:選択の先頭位置を指定します SelLengthプロパティ:選択されている文字数を指定します 文字列全体を選択状態にするなら、選択の先頭位置は0になります。
Private Sub CommandButton1_Click()
  If TextBox1.Text = "Password" Then
    MsgBox "OK"
  Else
    MsgBox "パスワードが間違っています"
    With TextBox1
      .SetFocus
      .SelStart = 0
    End With
  End If
End Sub   
選択する文字数は、入力されている文字列によって異なります。 入力されている文字列の文字数は、Len関数でわかります。 そこで、選択する文字数は次のように指定します。
Private Sub CommandButton1_Click()
  If TextBox1.Text = "Password" Then
    MsgBox "OK"
  Else
    MsgBox "パスワードが間違っています"
    With TextBox1
      .SetFocus
      .SelStart = 0
      .SelLength = Len(.Text)
    End With
  End If
End Sub   
小さな配慮が、使い勝手を大きく改善します。