vba SelStart の位置がずれる
テキストボックス内のカーソルの位置に、文字列を挿入しようとかいうときに問題になる事象です。
以前も SelStart の位置がずれる件で結構時間がとられたのですけど、マルチライン型のテキストボックスで起きる現象なので、改行コードが2文字で構成されているためと対策した記憶があります。
つまり、マルチラインの場合、改行コードは chr(13)+chr(10) なんだけど、これを1文字で数えてるんだろうと。
chr(13)+chr(10)の数を数えて、カーソルの位置が、今何行目だから・・・と計算することで解決します。
が、面倒なので、改行コードを1文字に置き換えてしまえって乱暴?な手段に打って出るのが正解です。
つまり、こんな感じ
Sub Insert_string(strval) Dim idx Dim ins_str Dim ipos Dim f_str Dim b_str Dim strWORK ins_str = strval If ins_str <> "--" Then ipos = TextBox1.SelStart If ipos >= 0 Then strWORK = Replace(TextBox1.Text, vbCrLf, vbCr) ' f_str = Mid(strWORK, 1, ipos) b_str = Mid(strWORK, ipos + 1) TextBox1.value = f_str + ins_str + b_str End If End If End Sub
マルチラインの時には気を付けて。
スポンサーリンク