Word VBA Макросы: Как найти страницы без номера страницы?

Автор Roman4ik, 03 июля 2017, 19:05

Roman4ik

Приветствую форумчане!
Подскажите пожалуйста, как макросом найти страницы, на которых не проставлен номер страницы. Такое случается, когда в документе есть несколько разделов: на всех страницах есть номер страницы, а в одном разделе не стоит и иногда долго искать! Спасибо!

Администратор

Как узнать номер страницы, находясь в колонтитуле, я не знаю как.
Могу предложить такой вариант. Макрос заходит в нижний колонтитул и двигается до первого колонтитула, в котором нет номера страницы. Юзер вставляет номер страницы и юзер снова запускает макрос. Макрос переходит к следующему колонтитулу и т.д.

Макрос
Sub макрос()

    '1. Переход в нижний колонтитул, если юзер в него не зашёл.
    If ActiveWindow.ActivePane.View.SeekView <> wdSeekCurrentPageFooter Then
        ' Переход в режим разметки.
        ActiveWindow.ActivePane.View.Type = wdPrintView
        ' Переход на первую страницу.
        Selection.HomeKey Unit:=wdStory
        ' Заходим в нижний колонтитул.
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    End If
   
    ' Цикл по нижним колонтитулам от текущего до последнего.
    Do
   
        '2. Проверка, есть ли номер страницы в текущем колонтитуле.
        ' Если нет, то завершение работы макроса.
        If Selection.HeaderFooter.PageNumbers.Count = 0 Then
            MsgBox "Нет номера.", vbExclamation
            Exit Sub
        End If
       
        '3. Переход к следующему виду колонтитула или в следующий раздел.
        On Error Resume Next
        ActiveWindow.ActivePane.View.NextHeaderFooter
        If Err.Number <> 0 Then
            On Error GoTo 0
            Exit Do
        End If
        On Error GoTo 0
       
    Loop
   
    '4. Сообщение, чтобы юзер понял, что все колонтитулы просмотрены.
    MsgBox "Все колонтитулы просмотрены.", vbInformation
       
End Sub
[свернуть]

Roman4ik

Спасибо. Но вот использование лично мною выявило недостаток: на 1 страницы всегда у меня нет номера и он там не нужен. Макрос там и останавливается. Поэтому сомнительна для меня практическая значимость. А подправить под себя не могу я - не владею, к сожалению.

Администратор

После того, как макрос остановился, снова запускайте макрос, не выходя из колонтитула, - макрос пойдёт к следующим колонтитулам, а первый не будет смотреть.

Roman4ik

Я не знаю. Наверное, у Вас переходит, а у меня нет, все так же указывает на 1 страницу. У меня офис 2010.

Администратор

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

Макрос
Sub колонтитулы()

    '1. Переход в нижний колонтитул, если юзер в него не зашёл.
    If ActiveWindow.ActivePane.View.SeekView <> wdSeekCurrentPageFooter Then
        ' Переход в режим разметки.
        ActiveWindow.ActivePane.View.Type = wdPrintView
        ' Переход на первую страницу.
        Selection.HomeKey Unit:=wdStory
        ' Вход в нижний колонтитул.
        ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
    End If
   
    ' Цикл по нижним колонтитулам от текущего до последнего.
    Do
   
        '2. Проверка, есть ли номер страницы в текущем колонтитуле.
        ' Если нет, то завершение работы макроса.
        If Selection.HeaderFooter.PageNumbers.Count = 0 Then
            If MsgBox("Нет номера, будете вставлять?", vbExclamation + vbYesNo) = vbYes Then
                Exit Sub
            End If
        End If
       
        '3. Переход к следующему виду колонтитула или в следующий раздел.
        On Error Resume Next
        ActiveWindow.ActivePane.View.NextHeaderFooter
        If Err.Number <> 0 Then
            On Error GoTo 0
            Exit Do
        End If
        On Error GoTo 0
       
    Loop
   
    '4. Сообщение, чтобы юзер понял, что все колонтитулы просмотрены.
    MsgBox "Все колонтитулы просмотрены.", vbInformation
       
End Sub
[свернуть]

Администратор

Да и первую версию можно использовать. Просто если вам не надо вставлять номер страницы, то перейдите к следующему колонтитулу. Для этого нужно щёлкнуть на ленте соответствующую кнопку.

Roman4ik

Это уже лучше, спасибо! Попробую использовать.