Text1とText2があり、Text1に文字が入力されたらText2にも同じ文字が
反映される、といった内容のプログラムを作成しています。
Text1に任意の文字列を入力し、文字列の中に"|"が存在した場合に
Text2の文字列は"|"が改行に変わるようにしたいと思い
インターネットで見つけたサンプルコードを参考に以下を作成しました。
Public Function RepCRLF(s As String, rep As String) As String
Dim a As String
Dim i As Long
Dim j As Long
a = s
j = Len(rep)
i = 1 - j
Do
i = InStr(i + j, a, vbCrLf)
If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
Loop Until i = 0
RepCRLF = a
End Function
Private Sub Text1_Change()
Text2.Text = RepCRLF(Text1.Text, "|")
End Sub
これはうまくいったのですが、今度は逆に、
Text1に任意の文字列を入力し、文字列の中に改行が存在した場合に
Text2の文字列は改行が"|"に変わるようにしたいのですが
どうしてもうまくいきません。
i = InStr(i + j, a, vbCrLf)
↓
i = InStr(i + j, a, "|")
Text2.Text = RepCRLF(Text1.Text, "|")
↓
Text2.Text = RepCRLF(Text1.Text, vbCrLf)
上記のように単純にコードを変更しただけではできないのでしょうか。
よろしくお願い致します。
すいません文章がおかしかったようです。。。
Text1とText2があり、Text1に文字が入力されたらText2にも同じ文字が
反映される、といった内容のプログラムを作成しています。
Text1に任意の文字列を入力し、文字列の中に改行が存在した場合に
Text2の文字列は改行が"|"に変わるようにしたいと思い
インターネットで見つけたサンプルコードを参考に以下を作成しました。
Public Function RepCRLF(s As String, rep As String) As String
Dim a As String
Dim i As Long
Dim j As Long
a = s
j = Len(rep)
i = 1 - j
Do
i = InStr(i + j, a, vbCrLf)
If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
Loop Until i = 0
RepCRLF = a
End Function
Private Sub Text1_Change()
Text2.Text = RepCRLF(Text1.Text, "|")
End Sub
これはうまくいったのですが、今度は逆に、
Text1に任意の文字列を入力し、文字列の中に"|"が存在した場合に
Text2の文字列は"|"が改行に変わるようにしたいのですが
どうしてもうまくいきません。
i = InStr(i + j, a, vbCrLf)
↓
i = InStr(i + j, a, "|")
Text2.Text = RepCRLF(Text1.Text, "|")
↓
Text2.Text = RepCRLF(Text1.Text, vbCrLf)
上記のように単純にコードを変更しただけではできないのでしょうか。
よろしくお願い致します。
環境はVB5以前で良いですか?
試しに実行してみましたが、
>If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
の行でエラーになりました。
Text1への入力を あいう| とした場合
i=4となります。
・・・ってことで、単純にコードを変えるだけでは
If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
で「プロシージャの呼び出しまたは引数が不正です」となります。
単に「文字数」を数え損なっているだけでは・・・
"|"は、1文字ですが、vbCrLfは2文字(vbCrとvbLf)です。
>If i > 0 Then a = Left(a, i - 1) & rep & Right(a, Len(a) - i - 1)
Rigthで「-1」しているのは、vbCrLfの2文字分を省くためです。
例えば、
"あいう[vbCr][vbLf]えお"
の場合、Len=7、i(InStrの結果)は、4です。
ですから、Leftは3(i-1)を、Rigthは2(Lenの値-i-1)を指定します。
逆処理の場合、"|"は1文字ですから、
"あいう|えお"
の場合、Len=6、i(InStrの結果)は、4です。
ですから、Leftは3(i-1)を、Rigthは2(Lenの値-i)を指定するように変更すれば良いのでは・・・
じぇふさん、末吉大吉さん、
大変わかりやすいご説明を頂き、うまく処理することができました。
本当に有り難うございました!
そもそもこのRepCRLF関数自体vbCrLfを変換する関数なのでこれに手を加えるのはどうかと・・・。
たぶんY.SAKさんのサイトから見つけたかと思いますが、
この関数の直下に
■任意文字列の置換
という関数があります。
こちらを使用してはいかがでしょうか?
ツイート | ![]() |