1

Тема: Количество страниц и выделение текста страницы в активном документе

Для программного (с помощью макроса) определения количества страниц в активном документе можно использовать следующую процедуру:

Public Sub Pages1()
    MsgBox (ActiveDocument.ActiveWindow.Panes(1).Pages.Count)
End Sub

В объектной модели Word коллекция Pages (Страницы) подчинена объекту Pane (Панель).
Поскольку панель в активном документе обычно одна, то для обращения к коллекции Pages можно использовать родительский объект Panes(1).
Также хотелось бы обратить внимание, что объект Page (Страница) включает в себя в основном параметры страницы.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

2

Re: Количество страниц и выделение текста страницы в активном документе

Alex_Gur пишет:

В объектной модели Word коллекция Pages (Страницы) подчинена объекту Pane (Панель).
Поскольку панель в активном документе обычно одна, то для обращения к коллекции Pages можно использовать родительский объект Panes(1).
Также хотелось бы обратить внимание, что объект Page (Страница) включает в себя в основном параметры страницы, но не текст, размещенный на странице.

В дополнение к выше сказанному!!!

Каждый объект Page (Страница) имеет свойство Rectangles, который включает в себя все объекты находящиеся на указанной странице. Объект Rectangle может быть разных типов: текст, рисунки, разные линии нарисованные средствами Word, элементы управления, выделение и прочее. Определяет тип Rectangle свойство WdRectangleType. Если, например Rectangle.RectangleType = 0, это означает, что данный блок является текстовым и соответственно можно напрямую обратится к свойству Range блока.

3

Re: Количество страниц и выделение текста страницы в активном документе

aap77 пишет:

Каждый объект Page (Страница) имеет свойство Rectangles, который включает в себя все объекты находящиеся на указанной странице. Объект Rectangle может быть разных типов: текст, рисунки, разные линии нарисованные средствами Word, элементы управления, выделение и прочее. Определяет тип Rectangle свойство WdRectangleType. Если, например Rectangle.RectangleType = 0, это означает, что данный блок является текстовым и соответственно можно напрямую обратится к свойству Range блока.

Большое спасибо, Александр!
Очень меня порадовали! smile
На днях постараюсь добраться до свойства Text страницы, как Вы посоветовали.

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

4

Re: Количество страниц и выделение текста страницы в активном документе

Выделение текста второй страницы активного документа. Может быть, не самое красивое решение, но работает:

Public Sub Page1()
    Dim Type1 As Integer
    Dim i As Integer
    Dim a As Integer
    Dim b As Integer
    i = 0

    For Each Rectangle1 In ActiveDocument.ActiveWindow.Panes(1).Pages(1).Rectangles
        ' Pages(2) - это вторая страница активного документа
        
        Type1 = Rectangle1.RectangleType
        If Type1 = 0 Then
            Select1 = Rectangle1.Range.Text
            If i = 0 Then
                a = Rectangle1.Range.Start
            End If
            i = i + 1
            b = Rectangle1.Range.End
        End If
    Next [Rectangle1]
    ActiveDocument.Range(a, b).Select
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

5

Re: Количество страниц и выделение текста страницы в активном документе

Можно использовать предопределенную закладку \page
Тогда код будет немного покороче

Sub Page2()
'Используется предопределенная закладка \page
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="2"
    Selection.GoTo What:=wdGoToBookmark, Name:="\page"
End Sub

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

6

Re: Количество страниц и выделение текста страницы в активном документе

Boris_R пишет:

Можно использовать предопределенную закладку \page
Тогда код будет немного покороче

Sub Page2()
'Используется предопределенная закладка \page
    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="2"
    Selection.GoTo What:=wdGoToBookmark, Name:="\page"
End Sub

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

Спасибо большое!
Следующий код выделяет текущую страницу:

Sub Page3()
    ActiveDocument.Bookmarks("\page").Range.Select
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

7

Re: Количество страниц и выделение текста страницы в активном документе

Удаление текущей страницы:

Sub Page4()
    ' Выделение текущей страницы
    ActiveDocument.Bookmarks("\page").Range.Select
    ' Удаление выделенного фрагмента
    Selection.Delete Unit:=wdCharacter, Count:=1
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

8

Re: Количество страниц и выделение текста страницы в активном документе

Вырезать текущую страницу и поместить ее в буфер обмена:

Sub Page5()
    ' Выделение текущей страницы
    ActiveDocument.Bookmarks("\page").Range.Select
    ' Вырезание выделенного фрагмента и помещение его в буфер обмена
    Selection.Cut
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

9

Re: Количество страниц и выделение текста страницы в активном документе

Выделение каждой страницы в документе:

Sub Pages6()
    Dim j As Integer ' Номер страницы
    j = 1
    ' Переход на первую страницу
    Selection.HomeKey Unit:=wdStory
    For Each Page In ActiveDocument.ActiveWindow.Panes(1).Pages
        ' Выделение текущей страницы
         ActiveDocument.Bookmarks("\page").Range.Select
        ' Копирование текущей страницы
         Selection.Copy
        j = j + 1
        ' Переход на следующую страницу
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=str(j)
    Next [Page]
End Sub
Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.