Eu encontrei um trabalho para isso. Em vez de alterar os Itens , criei um script VBA para nomear todos os intervalos vinculados. Portanto, em vez de alterar o item de link no Word, altero o valor de intervalo nomeado no Excel. O item de link permanece o mesmo, mas aponta para um intervalo que pode ser modificado pragmaticamente. Aqui está o código que eu coloquei para colocar nomes em intervalos:
Sub CreateNamedRanges()
Dim i As Integer
For i = 1 To Worksheets.Count
sheetName = "Mysheet" & i
varName = "Myvar" & CStr(i)
Set Rng = Sheets(sheetName).Range("G6:I9")
ActiveWorkbook.Names.Add Name:=varName, RefersTo:=Rng
Next i
End Sub
A desvantagem dessa abordagem é que tive que recriar (vincular) manualmente todas as conexões que fiz anteriormente. Para alterar o arquivo Source, usei o código no link da questão. Para completar, estou escrevendo aqui:
Sub changeSource()
Dim dlgSelectFile As FileDialog 'FileDialog object
Dim thisField As Field
Dim selectedFile As Variant 'must be Variant to contain filepath of selected item
Dim newFile As Variant
Dim fieldCount As Integer
'create FileDialog object as File Picker dialog box
Set dlgSelectFile = Application.FileDialog(FileDialogType:=msoFileDialogFilePicker)
With dlgSelectFile
'use Show method to display File Picker dialog box and return user's action
If .Show = -1 Then
'step through each string in the FileDialogSelectedItems collection
For Each selectedFile In .SelectedItems
newFile = selectedFile 'gets new filepath
Next selectedFile
Else 'user clicked cancel
End If
End With
Set dlgSelectFile = Nothing
'update fields
fieldCount = ActiveDocument.Fields.Count
For x = 1 To fieldCount
ActiveDocument.Fields(x).LinkFormat.SourceFullName = newFile
Next x
End Sub
Por fim, para atualizar todos os links de uma só vez:
Sub AutoOpen()
ActiveDocument.Fields.Update
End Sub