Как автоматически добавить в закладки и гиперссылку соответствующий текст в VBA - PullRequest
0 голосов
/ 08 января 2012

Я пытаюсь создать сценарий в VBA для документа Word, в котором закладки и гиперссылки соответствуют строкам с нумерацией в месте, расположенном позже в документе.Прямо сейчас у меня есть два набора соответствия для сопоставления текста, который выглядит следующим образом (иногда с сотнями других):

Содержание

'Здесь есть закладка с именем "InpCon"

  1. 4326: информация 1
  2. 32534: информация 2
  3. 7980: информация 3

Тело

'Существуетзакладка здесь с именем "InpBod"

  1. 4326: информация 1
  2. 32534: информация 2
  3. 7980: информация 3

Эточто я пытаюсь сделать:

Содержание

'Здесь есть закладка с именем "InpCon"

  1. 4326: Info 1' Гиперссылка на закладкуИмя: "Info1"
  2. 32534: гиперссылка Info 2 'на закладку Имя: "Info2"
  3. 7980: гиперссылка Info 3' на закладку Имя: "Info3"

Body

'Здесь есть закладка с именем "InpBod"

  1. 4326: Info 1' Имя закладки: "Info1"
  2. 32534: Info 2 'Имя закладки: "Info2"
  3. 7980: Info 3 'Имя закладки: "Info3"

Я пытаюсь реализовать это в конце более крупного скрипта, который у меня есть.Более крупный сценарий копирует все данные под закладкой «InpBod» в закладку «InpCon» в одной точке.Я не знаю, будет ли ввод процесса для этого более эффективным.

В основном мои знания VBA довольно ограничены.Я пытался найти что-то, что выполняет эту задачу, но не нашел ничего.Я вставил бы свой код, но он довольно большой и в автономной системе.Если бы я смог это сделать, это могло бы сбить часы с моей недели.Может ли кто-нибудь помочь мне или указать правильное направление?Заранее спасибо.

1 Ответ

0 голосов
/ 08 января 2012

Не «вручную» генерировать «InpCon». Используйте Word для генерации оглавления. При создании «InpBod» каждый раз, когда вы сталкиваетесь с чем-то, на что хотите связать, пометьте его и затем автоматически сгенерируйте оглавление. Два возможных способа сделать это:

  1. Используйте стили заголовков, а затем создайте оглавление. Каждый раз, когда вы наталкиваетесь на помеченную запись, пометьте абзац заголовком Selection.Range.Paragraphs.Style = ActiveDocument.Styles(wdStyleHeading1). Вы можете изменить стили заголовков по умолчанию. Затем вставьте оглавление в начале.
  2. Используйте закладки, если документ использует заголовки для чего-то другого. Каждый раз, когда вы наталкиваетесь на запись, которую нужно пометить, создайте закладку, подобную этой: ActiveDocument.Bookmarks.Add Range:=Selection.Range.Collapse wdCollapseEnd, Name:=**THEBOOKMARKNAME**. Обратите внимание, что вам придется удалить пробелы и тому подобное для названия закладки. Затем выполните итерацию по всем activedocument.Bookmarks вставкам ссылок, используя Selection.InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _ wdContentText, ReferenceItem:=ITEM, InsertAsHyperlink:=True, _ IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "

Макро-рекордер выставит каждый объект, необходимый для этого.


Использование более новой информации из комментариев: Объектная модель списка Word очень хорошо проиллюстрирована здесь: Зацикливание макроса Word над многими абзацами списка вызывает проблему с памятью , а здесь http://oreilly.com/catalog/writewordmacro/chapter/ch17.html с более подробной информацией. Вот соответствующая документация: http://msdn.microsoft.com/en-us/library/aa223019(v=office.11).aspx

Вы должны пройтись по членам коллекции списков (для того, что я собираю, у вас должен быть только один список, список InpBod). Затем переберите абзацы в этом списке, выбрав каждый из них следующим образом:

Dim para as Range
For Each para In ActiveDocument.Lists(1).ListParagraphs
   para.Range.Select
Next para
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...