Я нашел работу вокруг этого. Вместо того, чтобы менять Itens, я создал VBA-скрипт для именования всех связанных диапазонов. Поэтому вместо изменения элемента ссылки в Word я изменяю значение именованного диапазона в Excel. Элемент ссылки остается прежним, но он указывает на диапазон, который можно прагматически изменить. Вот код, который я собрал, чтобы поместить имена в диапазоны:
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
Недостатком этого подхода является то, что мне пришлось заново создавать (связывать) все соединения, которые я делал ранее. Для изменения файла Source я использовал код в ссылке на вопрос. Для завершения я пишу это здесь:
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
Наконец, чтобы обновить все ссылки сразу:
Sub AutoOpen() ActiveDocument.Fields.Update End Sub