自己解決されたとのことですので完全に蛇足ですが、私も不具合を回避する方法がみつかりましたので、改めて回答したいと思います。
Set body = doc.GetFirstItem( "Body" )
Set nav = body.Createnavigator
n = 1
if nav.Findnthelement( elm, n ) Then
Do
Set range = body.CreateRange
Call range.Setbegin(nav)
Call nav.Findnthelement( elm, n + 1 )
Call range.Setend(nav)
msg = range.Textrun
'ここで文字列の処理
Call range.FindAndReplace( msg, "<置換する文字列>", RT_REPL_ALL + RT_FIND_CASEINSENSITIVE)
Call body.Update()
Set range = Nothing
n = n + 1
Loop While nav.Findnthelement( elm, n )
End If
Call doc.Save(True, True)
元のコードとの違いですが、次の2つです。
- テキストランを番号で順に指定する
- SetBegin/SetEnd でレンジを明確にする
テキストランの範囲を「n 番目から n + 1 番目」としていますが、実際のところ FindandReplace の対象となるのは n 番目だけです。
ちなみに上のコードでは削除していますが、ヘルプにあるサンプルに従って SetPositionAtEnd を SetEnd の直前で実行したところ不具合に遭遇しました。
なお、文字と文字の間に小さいイメージをペーストしたような場合、range.Textrun はペーストした画像を除く前後の文字列をセットしますが、これをFindandReplace で置換することができませんでした。リッチテキストはなかなか難しいですね。