カーソルがテキストボックスの何文字目にあるかを取得する

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

 テキストボックスを選択したときや編集しているときに、カーソルの位置がどこにあるのか、つまり何文字目にきているのかを知る方法です。ズバリSelStartプロパティで取得できますので例を示します。
 なお、例は省略しますがこのプロパティはカーソル位置の設定にも使えます。


f:id:accs2014:20180514000540p:plain:right:w300

 具体的に、フォームの「作品名」がクリックされたときにその位置を表示させるものとします。
 イベントプロシージャに次のように記します。


Option Compare Database

Private Sub 作品名_Click()
MsgBox (Me.作品名.SelStart)
End Sub

 イベントとしてはGotFocusあたりでもよさそうに見えますがGotFocusやEnterだと「フィールド移動時の動作」での設定に基づく値(通常0)しか表示されません。
 ただしTabキーなどで移動してきた場合にも取得する必要があるのであればこれらのイベントも考慮する必要があります。また、文字列に変更が加わるたびに取得するのであればChangeイベントが使えますのでこの辺りは用途に応じて試してみてください(適当)。


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

 さて、このあたり(3文字目と4文字目の間)でクリックすると…


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

 3と表示されました。この後メッセージボックスを閉じると、カーソルは3文字目と4文字目の間で点滅します。
 なお、クリックと同時に文字列の一部を選択した場合は、その選択した文字列のうち最初の文字の位置から1を引いた値となります。例えば、3文字目から5文字目までを選択した場合は3引く1つまり「2」となります。