Структура Word

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
ARD
Сообщения: 4
Зарегистрирован: 23 фев 2008, 21:18

Подскажите, пожалуйста, как работать со структурой документа Word... а именно, как выделить текст, находящийся между двумя заголовками (одинаковых уровней)? Какие средства в VBA отвечают за работу с заголовками различных уровней?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Заголовок в MS Word задаётся стилилем (style)
Стиль точки под курсором - Selection.Style - это просто строка типа "Заголовок 2"
Найти текст с таким же стилем поможет код:

Код: Выделить всё

With Selection.Find
     .ClearFormatting
     .Style = ActiveDocument.Styles("Заголовок 2")
     .Execute
End With 
Переключиться в режим работы со структурой документа можно через меню
Вид->Структура
или программно:

Код: Выделить всё

ActiveWindow.ActivePane.View.Type = wdMasterView
Перейти к заголовку под номером N (без учёта уровней) можно так:

Код: Выделить всё

Selection.GoTo What:=wdGoToHeading, Which:=wdGoToFirst, Count:=N
При обработке нужно не забыть про вариант:

level1
..level2
....level 3
....level3
..level2
....level3
..level2

Поиск текста со стилем level3 для первого выделенного текста найдёт очередной (т.е. второй выделенный), что очевидно для вас не подойдёт.
Поэтому поиск нужно осуществлять в соответствующей области. Или просто идти по заголовкам и выбирать очередной подходящий, обрабатывая стиль.
ARD
Сообщения: 4
Зарегистрирован: 23 фев 2008, 21:18

У меня возникают трудности еще в том что документ создан был в Word 2003 и при открытии его в Word 2007 у заголовков стиль - "обычный", хотя при открытии структуры документа все заголовки присутствуют...
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

ARD писал(а):У меня возникают трудности еще в том что документ создан был в Word 2003 и при открытии его в Word 2007 у заголовков стиль - "обычный", хотя при открытии структуры документа все заголовки присутствуют...
Это IMHO баг Microsoft. Перед сохраненим в 2003 - выделяйте стили цветом, а при загрузке файла в 2007 - восстанавливайте стиль.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Ещё одна идея:
Есть встроенная закладка Word - \HeadingLevel
&quot писал(а): Текущий заголовок (заголовок, включающий выделение или курсор) и все подчинённые заголовки или текст. Если текущее выделение не является заголовком,
VBA выделяет заголовок, предшествующий выделению, а также все подчинённые заголовки или текст

Т.е допустим код вроде

Код: Выделить всё

ActiveDocument.Bookmarks("\HeadingLevel").Range.Select 
ARD
Сообщения: 4
Зарегистрирован: 23 фев 2008, 21:18

Aent писал(а):Ещё одна идея:
Есть встроенная закладка Word - \HeadingLevel

Т.е допустим код вроде

Код: Выделить всё

ActiveDocument.Bookmarks("\HeadingLevel").Range.Select 
Спасиб)) - разобрался
Ответить