
Можно ли изменитьЭлементссылки в MS Word, ссылающейся на электронную таблицу Excel, прагматично, с помощью VBA?
Я нашел обсуждения о том, как насчетизменить источник файла, но не тотЭлемент, показанный ниже вредактировать ссылкуменю из MS Word 2010:
Точно такой же вопрос уже задавалсяздесь, но без каких-либо ответов, около 2 лет назад. Я также посмотрел вФормат ссылкидокументацию по свойствам, которая используется для редактирования Источника ссылки, но это ни к чему меня не привело.
Любые идеи по решению этой проблемы приветствуются.
Фон: У меня есть таблица Excel, которая передает данные в документ Word. Я пытаюсь использовать этот документ в качестве шаблона, где в зависимости от анализа я бы изменил таблицу, которая передает данные в документ Word. Таблицы в таблице (не отформатированные как таковые) могут различаться по диапазону. Однако у них одинаковое количество столбцов. Поскольку количество строк различается, мне пришлось бы изменить поле Item соответствующим образом.
Редактировать
Я предоставил 2 файла-образца в качестве MWE проблемы. Их можно найтиздесь.
решение1
Я нашел способ обойти это. Вместо того, чтобы изменитьИтенс, я создал скрипт 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