テキストボックスに入力中の値を取得する

 編集中のテキストボックスの値、つまり入力途中の、今まさに表示されている値を取得しようというものです。
 答えは簡単で、テキストボックスのValueプロパティではなくTextプロパティを用います。

f:id:accs2014:20180526134027p:plain:right:w600

 実際に試してみます。
 フォームにテキストボックス(名前は「入力テキスト」)を置き、フォームモジュールに次のように入力します。
 Changeイベントを用いているので、入力が確定しなくとも入力が進むたびにイベントが発生します。


Option Compare Database

Private Sub 入力テキスト_Change()

MsgBox (Me.入力テキスト.Text)

End Sub


f:id:accs2014:20180526134024p:plain:right:w400


 入力時の様子です。
 「山田」と変換を確定したところで、直ちに値が取得され表示されます。


f:id:accs2014:20180526134021p:plain:right:w400

 さらに「太郎」と変換を確定したところで同様に値が表示されます。
 Valueプロパティだと古い値(更新前の値)が表示されたりしてうまくいきませんが、Textプロパティだとこのように編集中の値をそのまま取得できます。


 用途としてはGoogleの検索候補サジェストのようなリアルタイムの処理をしたい場合に役立つかもしれません(正確にいいますとGoogleは変換途中の語句にも反応しますのであちらの方が優秀です)。
 なお注意点として、テキストボックスが空の場合のTextプロパティの値は空文字列(Valueプロパティの場合はNull)になることが挙げられます。また、上記のようにVBAでは使えますが、他のテキストボックスから参照しようとする(他のテキストボックスのコントロールソースを「=[入力テキスト].[Text]」とする)とエラーとなります。