もし、ユーザーに入力してもう文字数に制限があった場合、入力された文字列が何か・・・より先に、そもそも文字数が制限の範囲内なのかを調べなければなりません。たとえば下図のようにパスワードを入力してもらうUserFormだったとき、入力すべきパスワードが最大で4文字だとしたら、5文字以上は入力させないようにしておけば、とりあえず文字数の問題は解決ですね。
テキストボックス内の文字列が変更されると、TextBoxのChangeイベントが発生します。ここにコードを書いておけば、入力された文字数をリアルタイムでチェックできます。
Private Sub TextBox1_Change() Me.Caption = Len(TextBox1.Text) & "文字" End Sub
これを利用して「入力された文字数が4を越えたかどうか」を判定してみましょう。注意すべきは、Changeイベントが発生するタイミングです。Changeイベントは入力が完了した後に発生します。つまり、入力されたのが5文字だったとき、5文字目が入力されてからマクロが実行されることになります。つまり、4文字までしか入力させないようにしても、一時的には5文字目が入力されていることになります。
Private Sub TextBox1_Change() If Len(TextBox1.Text) > 4 Then ''すでに5文字目が入力されている End If End Sub
4文字しか「入力させない」のだとしたら、一時的に入力されてしまった5文字目だけを消さなければなりません。これは、発想を変えればいいです。5文字目を消すのではなく、先頭から4文字目だけを有効にすればいいんです。つまり
・5文字目が入力される
↓
・Changeイベントで「5文字入力された」ことを感知
↓
・Changeイベントのマクロで「先頭から4文字分」をテキストボックスに入れ直す
となります。
Private Sub TextBox1_Change() If Len(TextBox1.Text) > 4 Then TextBox1.Text = Left(TextBox1.Text, 4) End If End Sub
これで、テキストボックスには4文字しか入力できなくなりました。だけど、実はもっと簡単な方法があるんです。TextBoxのMaxLengthプロパティは、そのテキストボックスに入力できる最大文字数を設定できます。まさに、今回のテーマにぴったりのプロパティです。
このように設定しておけば、テキストボックスには4文字しか入力できなくなります。文字数の制限をしないときは、MaxLengthプロパティに0を指定します。
なお、本コンテンツで紹介したLeft関数や、MaxLegthプロパティは、いずれも全角と半角を区別しません。テキストボックス内の全角と半角を区別する方法は、下記のページを参考にしてください。