テキストボックスに入力できる文字数を制限する(2):確定前の検証
UserFormのTextBoxをBeforeUpdateで検証し、6文字以上ならTab移動を止めます。5文字へ修正して移動できるまでを試します。
実行前に確認
- 「移動先」ボタンはTab移動を試すための部品で、クリックしても保存処理はありません。空欄も禁止したい場合は、文字数の上限とは別に必須入力の検証が必要です。
- TabIndexは0から始まる移動順、TabStopはTabキーで移動先にできるかの設定です。この例はTextBox1→CommandButton1の順をコードで指定しています。
- 入力途中は6文字以上も打てます。フォーカス移動前に5文字以内であることを検証する方式です。
- フォームの×や強制終了による終了まで防ぐ保存検証ではありません。実運用では保存ボタン側でも同じ条件を検証します。
- 添付目次の番号に対応させた独自の実装例です。書籍本文の方法を再現・確認したものではありません。
- コードと公式仕様を照合した学習用の例です。Excel実機での実行確認は行っていません。
1サンプルコード
'【貼付先:UserForm1 のコードモジュール】
Option Explicit
Private Sub UserForm_Initialize()
Me.Width = 360
Me.Label1.AutoSize = True
Me.TextBox1.MaxLength = 0
Me.TextBox1.TabIndex = 0
Me.TextBox1.TabStop = True
Me.CommandButton1.TabIndex = 1
Me.CommandButton1.TabStop = True
Me.CommandButton1.Caption = "移動先"
Me.Label1.Caption = "5文字以内で入力してください。"
End Sub
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Len(CStr(Me.TextBox1.Value)) > 5 Then
Cancel = True
Me.Label1.Caption = "6文字以上です。5文字以内へ修正してください。"
Else
Me.Label1.Caption = "入力は5文字以内です。"
End If
End Sub図で見る確定する前に検証
イメージ図UserFormのTextBoxをBeforeUpdateで検証し、6文字以上ならTab移動を止めます。5文字へ修正して移動できるまでを試します。
入力:6文字
TextBox1へ123456を入れ、Tabを押す
検証:6 > 5
BeforeUpdateでLenを調べ、Cancel=Trueにする
結果:移動しない
TextBox1にフォーカスが残り、Label1に警告が出る
修正:5文字
末尾の6を削除し、12345にしてTabを押す
結果:移動できる
5文字以内と表示され、「移動先」ボタンへフォーカスが移る
文字は自動で切り捨てません。空欄は0文字として許可します。このボタンに保存機能はなく、入力を確定できるかを試す例です。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する6つの手順で、コードの使い方を確認できます
- 1
Windows版デスクトップExcelの練習用ブックを.xlsmで保存し、Alt+F11→[挿入]→[ユーザーフォーム]で、名前がUserForm1の空のフォームを用意します。各例は別々に試します。
- 2
ツールボックスからTextBox、Label、CommandButtonを各1個、フォーム本体へ重ならないように置きます。各[(Name)]をTextBox1、Label1、CommandButton1にします。Frameなどの中には置きません。
- 3
UserForm1を右クリック→[コードの表示]を開き、掲載コード全体をフォームのコードモジュールへ貼り付けます。標準モジュールには貼り付けません。
- 4
VBEでUserForm1を選び、F5で表示します。TextBox1をクリックして「123456」と入力し、Tabキーを押します。入力欄にカーソルが残り、Label1に警告が出ることを確認します。
- 5
末尾の「6」を削除して「12345」に直し、もう一度Tabを押します。「入力は5文字以内です。」と表示され、フォーカス(キー操作の対象)が「移動先」ボタンへ移ります。
- 6
TextBox1を再びクリックし、全ての文字を削除してからTabを押します。空欄は0文字なので、この例では移動できます。