vba SelStart の位置がずれる


スポンサーリンク

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

マルチラインの時には気を付けて。

スポンサーリンク

Leave a comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です