#036 テキストボックスに入力された文字数を半角/全角含めてチェックする フォーム、VBA

テーブルやクエリーと連結されたテキストボックスでは、入力された文字数がテーブルに定義されているフィールドサイズを越えていないか、特に何もしなくてもAccessが調べてくれ、それ以上は入力できないようにしてくれます。特に、入力された文字に半角と全角が混在している場合でも、半角は1文字分、全角は2文字分として計算してくれますので、例えば、フィールドサイズが"3"のテキスト型フィールドに"全角"と入力しようとすると、"全"しか受け付けてくれません。

一方、テーブルなどと連結されていないテキストボックスに任意の文字を入力して、"[OK]ボタンをクリックしたらその内容をテーブルに書き込む"、といった処理では、あらかじめそのテキストボックスの[BeforeUpdate/更新前処理]イベントを使って入力された文字数がフィールドサイズを越えていないかチェックする必要があります。しかし、ここで"txtInputData"という名前のテキストボックスに入力された文字数を調べようとした場合、
  If Len(Me!txtInputData) > 10 Then
    MsgBox "文字数が多すぎます!"
  End If
  
  If LenB(Me!txtInputData) > 10 Then
    MsgBox "文字数が多すぎます!"
  End If
のようにすると、前者では全角も1文字分としてカウントされてしまいますし、後者では"Unicode"としてのカウントのために半角も2文字分としてカウントされてしまい、テーブルのフィールドサイズとの適合がうまく判断できません。このようなチェック方法でOKだからといって、テーブルに書き込むとその時点でエラーが発生する可能性があります。

そこで、テキストボックスに半角と全角が混在した状態で入力されても、テーブルのフィールドサイズとの整合性を正しくチェックする方法を紹介します。

それには、StrConv関数を使用して、いったん入力された文字列を"Unicodeからシステムの既定のコードページに変換(定数 vbFromUnicode)"してからその長さをチェックするようにします。そのコードは次の通りです。
  If LenB(StrConv(Me!txtInputData, vbFromUnicode)) > 10 Then
    MsgBox "文字数が多すぎます!"
  End If
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved