Приветствую форумчане!
Подскажите пожалуйста, как макросом найти страницы, на которых не проставлен номер страницы. Такое случается, когда в документе есть несколько разделов: на всех страницах есть номер страницы, а в одном разделе не стоит и иногда долго искать! Спасибо!
Как узнать номер страницы, находясь в колонтитуле, я не знаю как.
Могу предложить такой вариант. Макрос заходит в нижний колонтитул и двигается до первого колонтитула, в котором нет номера страницы. Юзер вставляет номер страницы и юзер снова запускает макрос. Макрос переходит к следующему колонтитулу и т.д.
Макрос
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
Спасибо. Но вот использование лично мною выявило недостаток: на 1 страницы всегда у меня нет номера и он там не нужен. Макрос там и останавливается. Поэтому сомнительна для меня практическая значимость. А подправить под себя не могу я - не владею, к сожалению.
После того, как макрос остановился, снова запускайте макрос, не выходя из колонтитула, - макрос пойдёт к следующим колонтитулам, а первый не будет смотреть.
Я не знаю. Наверное, у Вас переходит, а у меня нет, все так же указывает на 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
Да и первую версию можно использовать. Просто если вам не надо вставлять номер страницы, то перейдите к следующему колонтитулу. Для этого нужно щёлкнуть на ленте соответствующую кнопку.
Это уже лучше, спасибо! Попробую использовать.