Обновление элемента ссылки Microsoft Word через VBA

4363
brodoll

Можно ли прагматично изменить элемент ссылки в MS Word, ссылаясь на электронную таблицу Excel, с помощью VBA?

Я нашел обсуждения того, как можно изменить источник файла, но не « Элемент», показанный ниже в меню ссылок редактирования из MS Word 2010:

Редактировать вкладку ссылки

Точно такой же вопрос уже задавался здесь, но без каких-либо ответов, около 2 лет назад. Я также изучил документацию по свойствам LinkFormat, которая используется для редактирования источника ссылки, но ни к чему не привела.

Любые идеи о том, как решить проблему, приветствуются.

Предыстория : у меня есть таблица Excel, снабжающая текстовый документ данными. Я пытаюсь использовать этот документ в качестве шаблона, где в зависимости от анализа я бы изменил электронную таблицу, подающую данные в текстовый документ. Таблицы в электронной таблице (не отформатированные как таковые) могут варьироваться по диапазону. Тем не менее, они имеют одинаковое количество столбцов. Так как количество строк варьируется, я должен изменить поле Item соответственно.

редактировать

Я предоставил 2 образца файлов в качестве MWE проблемы. Их можно найти здесь .

2
Я посмотрел на свойства объекта `InlineShape`, но не смог увидеть (или установить ...) свойство элемента в Word 2013. Могу ли я иметь небольшой файл примера (Word 2010), где свойство элемента имеет вид задавать? nixda 9 лет назад 0
@nixda Я обновил вопрос ссылкой на файл примера MS Word, где установлено свойство Item. brodoll 9 лет назад 0
Я не могу открыть их, не разорвав ссылку между ними, потому что мой путь (структура папок) не совпадает с вашим. Можете ли вы связать их, когда они оба находятся в папке, например, "C: \ test"? nixda 9 лет назад 0
Извините, я не против этого. Я связал их, как вы предложили "C: \ Test \" brodoll 9 лет назад 0
Все еще не работает. У меня нет идей, сри nixda 9 лет назад 0
@ nixda Errr меня тоже. Спасибо за ваше время и интерес, я очень ценю brodoll 9 лет назад 0

1 ответ на вопрос

1
brodoll

Я нашел работу вокруг этого. Вместо того, чтобы менять 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