パスワードを入力する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関数を使って文字数を取得しています。