Статьи из блога
Двойная нумерация страниц в документе
Андрей интересуется:
Возникла необходимость вести в документе две нумерации страниц - сквозную (внизу страницы) и внутреннюю, по разделам, то есть часть номеров страниц в верхнем и нижнем колонтитуле не совпадает - можно это автоматизировать?
Стандартными способами в редакторе Word 2003 это сделать не удастся. Но на официальном сайте Microsoft есть замечательная статья на русском языке, описывающая два способа реализации схемы двойной нумерации в одном документе.
Статья называется
Я написал макрос по первому описанному методу, но у меня возникли сложности с колонтитулами и пришлось просить совета у более опытных товарищей на форуме Microsoft. В итоге получился вполне работающий макрос, который я и представляю вашему вниманию.
К сожалению, в редакторе Word 2007 макрос хоть и работает, но сквозная нумерация страниц не поддерживается (в нижнем колонтитуле). Если кто-нибудь сможет доработать этот макрос для Word 2007, я буду благодарен (не один я, наверное).
Sub twinNumberingPages() 'Двойная нумерация страниц в документе, состоящим из разделов: ' верхний колонтитул - номер страницы в текущем разделе ' нижний колонтитул - сквозной номер страницы всего документа 'Создан на основе статьи Microsoft http://support.microsoft.com/kb/291283 'Макрос был поправлен Steven Graig Miller 09.06.2008 г. Dim oRange As Range Dim hfRange As Range Dim nSections As Long Dim nIndex As Long ' ' Шаг 1: Добавляем поля в начало первой страницы первого раздела ' Set oRange = ActiveDocument.Range(0, 0) 'определяем начало документа oRange.Select oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \h \r", PreserveFormatting:=False ActiveDocument.ActiveWindow.View.ShowFieldCodes = True Selection.Move wdCharacter, -1 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSectionPages, PreserveFormatting:=False Selection.Move wdCharacter, 1 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \h \r0", PreserveFormatting:=False nSections = ActiveDocument.Sections.Count ' ' Шаг 2: Добавляем два поля в начало каждого раздела кроме 1-го раздела ' If nSections > 1 Then For nIndex = 2 To nSections Set oRange = ActiveDocument.Sections(nIndex).Range oRange.Collapse wdCollapseStart oRange.Select oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \h \r", PreserveFormatting:=False Selection.Move wdCharacter, -1 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \c", PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable1 \h \r", PreserveFormatting:=False Selection.Move wdCharacter, -1 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, Text:="+", PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSectionPages, PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \c", PreserveFormatting:=False Next nIndex End If ' ' Шаг 3: Добавляем верхний и нижний колонтитулы ' ActiveDocument.ActiveWindow.View.ShowFieldCodes = False Set hfRange = oRange.Sections(1).Headers(wdHeaderFooterPrimary).Range With hfRange .Delete .Text = "Страница " .MoveEnd unit:=wdCharacter, Count:=1 .Collapse wdCollapseEnd oRange.Fields.Add Range:=hfRange, Type:=wdFieldPage .MoveEnd unit:=wdCharacter, Count:=1 .Collapse wdCollapseEnd .Text = " из " .MoveEnd unit:=wdCharacter, Count:=1 .Collapse wdCollapseEnd oRange.Fields.Add Range:=hfRange, Type:=wdFieldSectionPages End With Set hfRange = oRange.Sections(1).Footers(wdHeaderFooterPrimary).Range ActiveDocument.ActiveWindow.View.ShowFieldCodes = True hfRange.Collapse wdCollapseStart hfRange.Select hfRange.Fields.Add Range:=Selection.Range, Type:=wdFieldExpression, Text:="+", PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldSequence, Text:="variable2 \c", PreserveFormatting:=False Selection.Move wdCharacter, 3 oRange.Fields.Add Range:=Selection.Range, Type:=wdFieldPage, PreserveFormatting:=False ActiveDocument.ActiveWindow.View.ShowFieldCodes = False ' ' Шаг 4: Устанавливаем формат номеров (нумерация начинается с 1 в каждом разделе) ' For nIndex = 1 To nSections With ActiveDocument.Sections(nIndex).Headers(wdHeaderFooterPrimary) .PageNumbers.NumberStyle = wdPageNumberStyleArabic .PageNumbers.HeadingLevelForChapter = 0 .PageNumbers.IncludeChapterNumber = False .PageNumbers.ChapterPageSeparator = wdSeparatorHyphen .PageNumbers.RestartNumberingAtSection = True .PageNumbers.StartingNumber = 1 End With Next nIndex ActiveDocument.Range(0, 0).Select ActiveWindow.View.Type = wdPrintView 'переключаемся в режим Разметка страницы ActiveWindow.View.Zoom.PageFit = wdPageFitBestFit End Sub
Метки: колонтитулы | макросы | нумерация | разделы
Просмотров: 39406
Подписаться на комментарии по RSS
Версия для печати
Еще записи по вопросам использования Microsoft Word:
- 10 вопросов и ответов по редактору Word (1 часть)
- 3 способа очистки списка недавно открытых документов
- Word 2007: добавляем свою вкладку и свои команды
- Word 2007: полотно, рисунки, линии
- Word 2007: смена формата сохранения файла
- Word 97 - решение проблемы с отображением символов на линейке
- Word 97. Слияние документов как один из способов упростить свою работу
- Абзац с цветным фоном
- Автозаполняемые колонтитулы
- Автоматизация текстового набора в Word
- Автоматическая запись макроса
- Автоматическая нумерация билетов
- Автоматическая расстановка переносов
- Автоматическое обновление полей при открытии документа
- Автоматическое сохранение документа при его закрытии
- Автотекст с последовательной нумерацией
- Автоформат документов
- Белый текст на синем фоне в Word 2007
- Буквица
- Быстрая смена ориентации страниц документа
- Быстрое изменение стиля форматирования текста
- Быстрое перемещение между открытыми документами Word
- Быстрое создание нового документа на основе шаблона
- Быстрое удаление границ у таблицы
- Быстрый ввод текста с помощью команды =rand()
Комментариев: 4
Чтоб скрипт заработал в Word2007 достаточно в конце добавить строчку:
ActiveDocument.Fields.Update
Решил проблему двойной нумерации значительно проще. Если кто нить разместит эту информацию на этом сайте буду только за)
http://vishnivetskiy-alexey.narod2.ru/word/
Алексей, спасибо. Добавил в конец заметки информационный блок с ссылкой на вашу инструкцию.
Столкнулась как раз с такой задачей. Воспользовалась способом Алексея, немного его изменив. Ибо у меня порядка 60 разделов, весь текст идентичен, кроме нумерации. Итак, как сохранить единые колонтитулы для всего дока (Word 2010).
Нумерация по разделам делается стандартно - поле "Page" (начинать с 1) и поле "SectionPage". А теперь про сквозную.
В начале каждого раздела (именно в начале, это важно) пишем формулу, которую предложил Алексей ({={page}+{pageRef R1}+1}), и назначаем ей стиль (например, "Нумерация сквозная"). А в колонтитуле для номера страницы вставляем поле {={page}+{StyleRef "Нумерация сквозная"}}. Всё. Если номер первой страницы не "1", то эта цифра тоже прописывается в формуле.
Потом этот стиль можно сделать маленьким, белым, скрытым... каким угодно, чтобы он был не виден.