Автор Тема: Word VBA Макросы: Как найти страницы без номера страницы?  (Прочитано 1785 раз)

Roman4ik

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

Оффлайн Администратор

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

Макрос
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 страницы всегда у меня нет номера и он там не нужен. Макрос там и останавливается. Поэтому сомнительна для меня практическая значимость. А подправить под себя не могу я - не владею, к сожалению.

Оффлайн Администратор

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

Roman4ik

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

Оффлайн Администратор

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

Макрос
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

Оффлайн Администратор

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

Roman4ik

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