NotesRichTextRange FindAndReplace Cannot replace some case

I write an function to replace string in rich text:

Function RichTextReplaceSystemVariable(MailDoc As NotesDocument,contactdoc As NotesDocument)

On Error Goto ErrorTrap	

Dim session As New NotesSession

Dim db As NotesDatabase

Dim view As NotesView

Dim doc As NotesDocument

Dim body As Variant

Dim rtnav As NotesRichTextNavigator

Dim rtrange As NotesRichTextRange	

Dim searchString As String

Dim replaceString As String	

Dim n As Integer

Dim i As Integer

Dim returnval As Long



Set body = MailDoc.GetFirstItem("Body")



n = 0

Set rtnav = body.CreateNavigator



For i=1 To 6		

	Set rtrange = body.CreateRange	

	Call rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH)			

	Call rtrange.SetBegin(rtnav)		

	

	Select Case i

	Case 1

		searchString = "[[Salute]]"

		replaceString = contactdoc.Salute(0)

	Case 2				

		searchString = "[[LastName]]"

		replaceString = contactdoc.LastName(0)

	Case 3				

		searchString = "[[FirstName]]"

		replaceString = contactdoc.FirstName(0)

	Case 4				

		searchString = "[[CompanyName]]"

		replaceString = contactdoc.CompanyName(0)

	Case 5				

		searchString = "[[Address]]"

		Set db = session.CurrentDatabase

		Set view = db.GetView("($CustomerID)")

		Call view.Refresh

		Set doc = view.GetDocumentByKey(contactdoc.CustomerID(0),True)

		If Not doc Is Nothing Then

			replaceString = ""

			Forall ad In doc.GetItemValue("Address"+contactdoc.Address(0))

				If replaceString = "" Then

					replaceString = ad						

				Else	

					replaceString	= replaceString+Chr(10)+Chr(13)+ad					

				End If					

			End Forall

		End If			

	Case 6				

		searchString = "[[PhoneNumber]]"

		replaceString = Cstr(contactdoc.Phone(0))

	End Select

	

	

	While rtrange.FindAndReplace(searchString, replaceString)

		n = n + 1

		Set rtrange = body.CreateRange ' NEW

		Call rtnav.FindFirstElement(RTELEM_TYPE_TEXTPARAGRAPH) ' NEW

		Call rtrange.SetBegin(rtnav) ' NEW															

		Call body.Update			

	Wend

	

	If n > 0 Then

		Call body.Compact

	End If				

Next		



Exit Function

ErrorTrap:

Print "Error Occured during running"

Print "tgSLCustomer ReichTextReplaceSystemVariable " + Error$ " occured on line " & Erl & " of the thread "& Getthreadinfo(1)

Resume Next				

End Function

I find that if the line contains

Dear [[Salute]] [[FirstName]] [[LastName]] ,

the result becomes:

Dear [[Salute]] [[FirstName]] Mr XFirst YLast,

what is the problem with my code?