Alan,
I'm glad my suggestion helped.
Answering your questions
1. I would have thought the bookmark would remain. You can test this by, after creating the instance of word with CREATEOBJECT, setting oWord.Visible = .T.. You can then watch the changes as you run your code.
I would suggest that you run some code to replace the bookmark and then, in Word, click the Insert menu pad & bookmarks and (a) check the bookmark is still listed and (b) when you click the goto button, make sure that is still selects the block it should select. If the new text is of different length to what was there before, I would hope the bookmark would automatically change size.
2. I haven't come across this, but as I say you can experiment with Word visible alongside VFP and see what happens when you try running the EditGoTo & Insert
3. The way I have set up our letters (you may remember I work in-house) is that each letter has what are effectively mergefields. In fact they way I use them is that my VFP program uses Word's Find & Replace.
For example...
WITH oDoc.Application.Selection
*!* Replace placeholders WITH date, address block, salutation & gift info...
.Find.Execute("&dearhere",.T.,,,,,,,,ThisSalutation,1)
.Collapse(0)
*!* Change the place markers as appropriate. If the placemarkers aren't found, then nothing happens....
.Find.Execute("&GIFT",.T.,,,,,,,,GiftAmount,1)
.Collapse(0)
.Find.Execute("&ALLOC",.T.,,,,,,,,GiftAllocation,1)
.Collapse(0)
ENDWITH
...so in the letter are the mergefields (I call them placeholders) &dearhere, &GIFT, &ALLOC. You can see the long list of commas - the Find.Execute takes loads of parameters, most of which you can ignore but some are important and they're near the end (of course!).
The Execute code above is saying find &GIFT, the .T. means replace it, GiftAmount is what is put in place. I think the 1 at the end means only replace one instance.
I mentioned in my earlier posting that I actually use the bookmarks for deleting paragraphs I don't want in certain circumstances. This saves having 2 almost identical letter files. My code extends the bookmark to take in the blank line following - I don't know why I didn't just make the bookmark include the blank line, but there you go! If you should happen to try this, I recommend that you only extend the bookmark by 1 character rather than one line as shown in my code as this is more reliable.
I have also set up a process for mailmerging a letter to a list of contacts. For this I use Word's own mailmerging process. I actually got the syntax for this from another thread here on Tek-Tips. I'll see if I can find it after I've posted this.
I can also recommend the Hentzenwerke book on Office Automation.
Hope that all makes sense & helps you again. Get back if you want more guidance.
Stewart