こんにちは、Ryoです。
VBAのUserForm(ユーザーフォーム)上のTextBox(テキストボックス)を使用する際に、用途によって入力する文字数の制限をしたいことや入力モード(全角/半角英数字など)を設定したいこともあるかと思います。今回はその方法について書いていきます。
1.サンプル概要
今回はサンプルとして以下画像のようなフォームを作成しています。各ボタンにそれぞれ「制限なし(規定)」「全角ひらがな」「全角カタカナ」「全角英数字」「半角英数字」を割り当てており、入力文字を制限するON/OFF用トグルスイッチを設けています。
フォーム内のテキストボックスに入力する際に、各モード設定ボタンを押すことで入力モードが変わります。
◆全角ひらがな
◆全角カタカナ
◆半角カタカナ
◆全角英数字
◆半角英数字
入力文字数制限については、トグルボタンON(凹んだ状態)で6文字制限になります。
◆入力文字制限(サンプルでは6文字)
2.ユーザーフォーム構成
UserForm1の構成は以下の通りです。
TextBox1のフォントや文字サイズはプロパティで以下の通り設定していますので、ここはお好みで良いかと思います。
また、ToggleButton1は設置すると初期値でON(凹んだ状態)になるので、プロパティの「Value」を「False」とすることで初期がOFFになります。
TextBoxが1個、CommandButtonが6個、ToggleButtonが1個の計8個をUserForm1上に設置すればOKです。
3.サンプルコード
◆入力モードの設定
「IMEModeプロパティ」を使用することで、日本語入力システムの入力モードを設定することが出来ます。
オブジェクト.IMEMode = fmIMEMode
このfmIMEModeの定数としては以下があります⇒詳細はMSDN参照
定数 | 内容 |
fmIMEModeNoControl | 規定値 |
fmIMEModeOn | オン |
fmIMEModeOff | オフ(英語モード) |
fmIMEModeDisable | オフ(キーボードによるIMEのオン不可) |
fmIMEModeHiragana | 全角ひらがな |
fmIMEModeKatakana | 全角カタカナ |
fmIMEModeKatakanaHalf | 半角カタカナ |
fmIMEModeAlphaFull | 全角英数字 |
fmIMEModeAlpha | 半角英数字 |
fmIMEModeHangulFull | 全角ハングル |
fmIMEModeHangul | 半角ハングル |
これらの定数から必要なものを使用したサンプルコード(CommandButton1~6)が次の通りになります。
Private Sub CommandButton1_Click() With TextBox1 'テキストボックス内のクリア .Value = vbNullString '規定値(制限なし) .IMEMode = fmIMEModeNoControl End With End Sub Private Sub CommandButton2_Click() With TextBox1 .Value = vbNullString '全角ひらがなモード .IMEMode = fmIMEModeHiragana End With End Sub Private Sub CommandButton3_Click() With Me.TextBox1 .Value = vbNullString '全角カタカナモード .IMEMode = fmIMEModeKatakana End With End Sub Private Sub CommandButton4_Click() With Me.TextBox1 .Value = vbNullString '半角カタカナモード .IMEMode = fmIMEModeKatakanaHalf End With End Sub Private Sub CommandButton5_Click() With Me.TextBox1 .Value = vbNullString '全角英数字モード .IMEMode = fmIMEModeAlphaFull End With End Sub Private Sub CommandButton6_Click() With Me.TextBox1 .Value = vbNullString '半角英数字モード .IMEMode = fmIMEModeAlpha End With End Sub
各ボタンに対し、先ずTextBox1のデータをクリアしてから入力モードを設定するだけの内容になっていますが、これだけでサンプル概要の通り入力モードを変えることができます。
◆入力文字数の制限
入力文字数を制限するには「Maxlengthプロパティ」を使用します。
オブジェクト.Maxlength = number(整数)
これを利用することでTextBox1に入力できる最大文字数を設定することが出来ます。
(詳細はMSDN参照)
また構文のnumberに「0」を指定すると、制限なしとすることが出来ますのでトグルボタンを利用してON/OFFさせているサンプルコードが以下になります。
Private Sub ToggleButton1_Click() With Me.TextBox1 .Value = vbNullString If Me.ToggleButton1.Value = True Then 'トグルボタンが押されていれば6文字制限ON .MaxLength = 6 Else '押されていない場合は制限なし .MaxLength = 0 End If End With End Sub
実行すると、ON状態では指定文字数以上入力が出来ないようになっていると思います。
ちなみに、ToggleButtonが押されているか否かはToggleButton1.Value = True or Falseで判定出来ますので、知っておくと今後何かと便利です。
4.まとめ
UserFormを使って入力作業をしたりすることも多いと思いますが、入力モードを都度設定したり、文字入力数違いによるミスなど、ちょっとしたことで煩わしく感じることがありますね。
その場合の対策として上述した通り、少しの記述で対応出来ますから知っておくと使い勝手の良いフォームが出来ると思います。また、今回はサンプルなのでボタンに割り当てていますが、実使用上であれば「UserForm_Initialize」イベントを使用すると良いです。
以上、入力モードの設定や入力文字数を制限する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo