У меня есть документ Excel, который использует VBA для создания более 100 квартальных отчетов из центрального набора данных. Сводные таблицы копируются из документа Excel и вставляются в документ Word, который служит шаблоном для отчета.
Один из столбцов в таблицах содержит текст, который я хотел бы преобразовать в отформатированные гиперссылки на соответствующие страницы. связанные с источниками данных строки. Мне не удалось найти метод, позволяющий гиперссылке пережить перевод из справочной таблицы в сводную таблицу (сводная таблица просто возвращает отображаемый текст без ссылки).
Я думал написать скрипт это будет искать текстовую строку в таблице и просто заменить ее отформатированной ссылкой. К сожалению, я не смог заставить этот подход работать, несмотря на то, что пробовал несколько версий.
Я довольно плохо знаком с VBA, поэтому, может быть, упускаю что-то простое, но я застрял довольно хорошо сейчас. Вот что я пробовал до сих пор:
Первая версия Попытка скопировать отформатированную гиперссылку из указанной ячейки в документе Excel, а затем заменить текст поиска на «^ c».
ThisWorkbook.Worksheets("SheetA").Range("A1").Copy
With myDoc.Content.Find
.Execute findText:="target text string", ReplaceWith:="^c", Replace:=wdReplaceAll
End With
Эта версия завершилась с ошибкой «Ошибка выполнения 6015»: метод «Выполнить» объекта «Найти» не удался ». Указанная ошибка c иногда изменяется, но всегда срабатывает после замены первой цели текстовая строка с скопированной ячейкой. Я думал, что часть проблемы может заключаться в том, что она вставляет всю скопированную ячейку из Excel в ячейку таблицы Word (не только гиперссылку), но я не смог найти способ вставить только ссылку.
Вторая версия Попытка прямого кодирования поиска и ссылки
Dim h, urlString, displayText as String
h = "target text string"
urlString = "desired address"
displayText = "hyperlink display text"
myDoc.Content.Select
With Selection.Find
.ClearFormatting
.Text = h
.Forward = True
.Wrap = wdFindContinue
End With
Do While Selection.Find.Execute
Selection.Text = "h"
ActiveDocument.Hyperlinks.Add Selection.Range, _
Address:=urlString, SubAddress:="", _
TextToDisplay:=displayText
Loop
Эта версия выдает мне «Ошибка времени выполнения» 450: неверное количество аргументов или неправильное присвоение свойства "в строке" With Selection.Find ".
Я пробовал несколько других версий (и их различных комбинаций), в основном пытаясь работать по добавленным ссылкам, но получил аналогичное отсутствие результатов. Надеюсь, что это просто глупость, которую я пропустил - благодарю за любую помощь!
Источник 1 Источник 2 Источник 3 Источник 4