I have some code, below, which updates three links in a Word doc to bring in the values of cells in an Excel workbook sheet. All I want to do is to change the source workbook from one to another and keep everything else the same. I've used the 'replace' method of updating the links rather than the 'LinkFormat.SourceFullName' way, but the same symptom shows up there too.

There are two problems:
1. For the two links (to single cells) that have the \* MERGEFORMAT switch, then after the update that switch is missing.
2. For the link to a range of cells linked as a 'Microsoft Excel Worksheet Object', the reference to the source range gets lost, and after the update the link just brings in the whole of the first sheet in the workbook as the worksheet name has gone too.

The Debug.Print output below the code shows the behaviour.

Set dDoc = Documents.Open(stFileToUpdate)
ActiveWindow.WindowState = wdWindowStateMinimize
On Error GoTo LinkError
With dDoc
  For n% = 1 To .Fields.Count
    With .Fields(n%)
      If .Type = wdFieldLink Then
        stOrigLink = .Code.Text
Debug.Print "Old" & CStr(n%) & ":    " & .Code.Text; ""
        stOldLinkFile = Replace(.LinkFormat.SourceFullName, "\", "\\")
' stNewLinkFile used in the next line is set up earlier as the full pathname to the new file, with doubled path separators.
        stNewFieldCode = Replace(.Code.Text, stOldLinkFile, stNewLinkFile) 
Debug.Print "Update" & CStr(n%) & ": " & stNewFieldCode
        .Code.Text = stNewFieldCode
Debug.Print "New" & CStr(n%) & ":    " & .Code.Text
        .LinkFormat.AutoUpdate = False
      End If
    End With
  Next
  .Fields.Update
End With
Here are the Debug.Prints. The first two are for links to named single cells and the third is to a named range of cells, all in a sheet called Draw. The 'Old' values are the original link, the 'Update' values show a variable containing the value of the original link with the filename replaced with the new one, and the 'New' values are the values of the link after being updated.

Old1: LINK Excel.Sheet.12 "F:\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!season" \t \* MERGEFORMAT
Update1: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!season" \t \* MERGEFORMAT
New1: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!season" \t

Old2: LINK Excel.Sheet.12 "F:\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!date" \t \* MERGEFORMAT
Update2: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!date" \t \* MERGEFORMAT
New2: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "Draw!date" \t

Old3: LINK Excel.Sheet.12 "F:\\WorldCup\\Final\\Draw_Details.xlsx!Draw!allgroups" "" \p
Update3: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "" \p
New3: LINK Excel.Sheet.12 "E:\\Documents\\WorldCup\\Final\\Draw_Details.xlsx" "" \p

As you can see, the 'New1' and 'New2' values have lost the \* MERGEFORMAT switch. Is there any way I can just add that back in?
For the third link, the sheet and range names given after the filename (Draw!allgroups) has somehow been lost in the statement
stNewFieldCode = Replace(.Code.Text, stOldLinkFile, stNewLinkFile)
I have no idea how to fix that.

I note the different formats of the two types of link text, and I'm guessing the third one is the format for a Worksheet Object (unless it's the \p switch - no idea, nor what the \t switch does either).

Has anyone got a clue about what's happening and how to prevent it?

I'm using Windows 10 and Office 2016.

(I also occasionally get messages about Excel not being able to open two workbooks with the same name, but that's probably a topic for another thread.)

Bill