Страница 1 из 1

Структура Word

Добавлено: 23 фев 2008, 21:29
ARD
Подскажите, пожалуйста, как работать со структурой документа Word... а именно, как выделить текст, находящийся между двумя заголовками (одинаковых уровней)? Какие средства в VBA отвечают за работу с заголовками различных уровней?

Re: Структура Word

Добавлено: 23 фев 2008, 23:08
Aent
Заголовок в 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 для первого выделенного текста найдёт очередной (т.е. второй выделенный), что очевидно для вас не подойдёт.
Поэтому поиск нужно осуществлять в соответствующей области. Или просто идти по заголовкам и выбирать очередной подходящий, обрабатывая стиль.

Структура Word

Добавлено: 23 фев 2008, 23:51
ARD
У меня возникают трудности еще в том что документ создан был в Word 2003 и при открытии его в Word 2007 у заголовков стиль - "обычный", хотя при открытии структуры документа все заголовки присутствуют...

Re: Структура Word

Добавлено: 24 фев 2008, 00:19
Aent
ARD писал(а):У меня возникают трудности еще в том что документ создан был в Word 2003 и при открытии его в Word 2007 у заголовков стиль - "обычный", хотя при открытии структуры документа все заголовки присутствуют...
Это IMHO баг Microsoft. Перед сохраненим в 2003 - выделяйте стили цветом, а при загрузке файла в 2007 - восстанавливайте стиль.

Re: Структура Word

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

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

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

ActiveDocument.Bookmarks("\HeadingLevel").Range.Select 

Re: Структура Word

Добавлено: 02 мар 2008, 21:20
ARD
Aent писал(а):Ещё одна идея:
Есть встроенная закладка Word - \HeadingLevel

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

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

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