テキストボックスに入力中の文字数を表示する

f:id:accs2014:20181118110153p:plain:right:w500

 テキストボックスの文字数は「=Len([テキストボックス])」といった漢字で簡単に取得できますが、入力中の文字数を随時表示するにはちょっと工夫が必要です。
 例としてこのようなフォームにおいて、一番下に見えるテキストボックス(名前は「解説」)に入力中の文字数を取得するものとします。



手順

f:id:accs2014:20181118101847p:plain:right:w500

 デザインビューです。
 文字数表示用のテキストボックスを置きます。名前は「文字数表示」とします。
 文字数の表示には関係ありませんが実用を考慮し、使用可能を「いいえ」、編集ロックを「はい」、タブストップを「いいえ」としておきます。


f:id:accs2014:20181118111751p:plain:right:w450

 フォームモジュールに次のように記します。
 先に説明しますと、フォームのCurrentイベント(レコード移動等)が発生した際には普通にテキストボックスの文字数を表示します。
 さらに「解説」のChangeイベントが発生した際に「解説.Text」の文字数を表示します。これで編集中のテキストボックスの長さが変わった際にも長さが随時表示されます。



Option Compare Database

Private Sub Form_Current()

Me.文字数表示.Value = Nz(Len(Me.解説.Value), 0) & "文字"

End Sub

Private Sub 解説_Change()

Me.文字数表示.Value = Len(Me.解説.Text) & "文字"

End Sub

f:id:accs2014:20181118101842p:plain:right:w500

 フォームビューです。
 文字数が表示されています。


f:id:accs2014:20181118101839p:plain:right:w500

 テキストボックスを編集すると、編集中でも(変換を確定するたびに)表示される文字数が変わります。


備考

 表示に非連結テキストボックスを用いていますので、帳票フォームにするとどのレコードも同じ値(カレントレコードの文字数)が表示されてしまいますので注意してください。
 なお上記のコードについてですが、テキストボックスのTextプロパティはテキストボックスがNullのときでもNullにはならず空文字(長さ0の文字列)になります。よって「Len(Me.解説.Text)」にNz関数を用いずとも0が出力されます。
 ではフォームのCurrentイベントのときもTextプロパティを用いればいいのではないかと思われますが、そのコントロール(テキストボックス)にフォーカスが来ていないときにTextプロパティを参照しようとするとエラーになります。よって参照するプロパティ(ValueとText)を使い分けています。