#include wdconstants.h #Define NL Chr(13)+Chr(10) *** set the LOCALEID to English nlLocaleId=Sys(3004) && Save local id =Sys(3006,1033) && We will be sending instructions in English Use _samples+'data\employee' && test table m.lcFileName = Sys(5)+Curdir()+'myBoookmarkTest.doc' oWordDocument=Createobject("word.application") && Create word object With oWordDocument .Documents.Add && Create a new doc Scan .Selection.TypeText(Transform(emp_id)+NL+First_Name-(' '+Last_Name)+NL) .Selection.Collapse(wdCollapseEnd) lnRangeStart = .Selection.Range.End .Selection.TypeText(Nvl(notes,'')+NL+NL) lnRangeEnd = .Selection.Range.End .Activedocument.Bookmarks.Add('b'+Alltrim(Transform(emp_id)),.Activedocument.Range(lnRangeStart,lnRangeEnd)) Endscan .Activedocument.SaveAs(m.lcFileName) .Activedocument.Saved = .T. .Quit Endwith * Now create a new file based on saved template * and change text based on bookmarks Select employee lcEmployeeRecnos = '1,3,4,5,6' lnEmployee = Alines(aEmpNo,lcEmployeeRecnos,.T.,',') Dimension aBookmarks[lnEmployee,2] && Change text for only few employee For ix=1 To lnEmployee Go Val(aEmpNo[m.ix]) aBookmarks[m.ix,1] = 'b'+Alltrim(Transform(emp_id)) aBookmarks[m.ix,2] = 'Notes for employee '+First_Name-(' '+Last_Name)+NL+NL Endfor * assumed typing replaces text option is set oWord = Createobject('Word.Application') With oWord .Documents.Add(m.lcFileName) && New file based on template file .Visible = .T. For ix=1 To Alen(aBookmarks,1) If .Activedocument.Bookmarks.Exists(aBookmarks[m.ix,1]) * preserves bookmark, inserts text replacing old one .Selection.Goto(wdGotoBookmark,,,aBookmarks[m.ix,1]) With .Selection .Font.Color = Rgb(255,0,0) .Font.Bold = .T. .TypeText( aBookmarks[m.ix,2] ) Endwith Endif Endfor .Visible = .T. .Activate Endwith **** Set the LocaleId to the previous value =Sys(3006,Val(nlLocaleId))For .Net you can utilize "VS Tools for MS office system". Check 'How to: Update Bookmark Text' in MSDN help.