Vba word нумерация страниц

Обновлено: 04.07.2024

Вставка особой нумерации на нечетные страницы с разрывом страницы

По ГОСТ18675-79, если текст в разделе заканчивается на нечетной странице, то номер этой страницы должен иметь вид n/n+1, например 7/8, так как на следующей - четной странице - текст отсутствует, а новый раздел начинается с нечетной страницы (9). Предыдущие страницы имеют нормальную нумерацию. Можно ли в Ворде реализовать такую нумерацию автоматически?

Я смог частично решить задачу, но уперся в определение разрыва страницы. Мой макрос (ниже) вставляет нужную нумерацию на нечетные страницы, но вот как сделать, чтобы эта нумерация вставлялась только на те нечетные страницы, которые имеют разрыв страницы - не смог осилить.
Пробовал определять разрыв по коду (12), но в цикле это приводит к ошибке (не существует такой объект).
Если кто может помочь, подскажите пожалуйста. Во вложении и документ-образец с текстом и разрывами.
Спасибо.

Здесь сама концепция неправильная - в одном разделе не могут быть разные колонтитулы чётных и нечётных страниц: все колонтитулы чётных страниц одинаковы, все колонтитулы нечётных страниц - одинаковые. Исключение составляет только первая страница раздела, на которой может быть уникальный колонтитул.

Я тоже задумался над этой проблемой. Ее можно было бы решить и без макросов, только полями, но все упирается в проблему определения количества страниц в разделе. А макросом, конечно, проще. Чуть позже решу, ближе к полуночи

Александр, спасибо. Буду ждать, ибо вопрос и меня зацепил так, что вчера полдня убил на раздумья.

  1. Ты путаешь Разрыв страницы с Разрывом раздела. Здесь речь не о Разрыве страницы, а о Разрыве Раздела.
  2. И зачем ты на пустых листах вставляешь Разрывы разделов? Я так понимаю, потому что ты хочешь вставить пустую страницу, т.к. речь идёт о двусторонней печати. Для вставки пустых страниц при двусторонней печати надо использовать Разрыв раздела с чётной страницы или Разрыв раздела с нечётной страницы.
  3. Ничего у вас не получится: если вы вставите какой-то особый номер страницы на одной нечётной странице, то он будет такой же на всех остальных нечётных страницах, а надо, как я понимаю, чтобы особый номер был только на одной нечётной странице - последней в разделе.

Последний раз редактировалось БуреВестник; 12.10.2009 в 16:46 .

Я даже не читая кода (плохо понимаю, что там), уже нашёл 3 ошибки:[*]Ты путаешь Разрыв страницы с Разрывом раздела. Здесь речь не о Разрыве страницы, а о Разрыве Раздела.

Не путаю. Я разрываю страницу (прерываю один раздел) и вставляю новый раздел. Возможно, путаница в терминологиии.

[*]И зачем ты на пустых листах вставляешь Разрывы разделов? Я так понимаю, потому что ты хочешь вставить пустую страницу, т.к. речь идёт о двусторонней печати. Для вставки пустых страниц при двусторонней печати надо использовать Разрыв раздела с чётной страницы или Разрыв раздела с нечётной страницы.
[*]Ничего у вас не получится: если вы вставите какой-то особый номер страницы на одной нечётной странице, то будет такой же на всех остальных нечётных страницах, а надо, как я понимаю, чтобы особый номер был только на одной нечётной странице - последней в разделе.

Правильно понимаешь. Но не стоит быть столь категоричным. Практика покажет.

класс PageNumber и коллекция Word PageNumbers - как в ворде сделать нумерацию страниц

При подготовке данного материала я столкнулся с некоторыми нестыковками… Так, в большинстве случаев у коллекции PageNumbers будет только один класс PageNumber, это и логично, так как нельзя сделать несколько "нумераций" страниц для одного раздела. Вторая нестыковка – если нумерация страниц в ворде для верхнего колонтитула начинается с заданного номера, то это автоматически влияет и на нумерацию для нижнего колонтитула. С одной стороны это понятно, какой смысл задавать различную нумерацию для верхнего и нижнего колонтитула, но, непонятно следующее…

Доступ к коллекции PageNumbers осуществляется через одноименное свойство объекта HeaderFooter, а тот в свою очередь, мы получаем через свойства Headers или Footers класса Section. Как видим, мы можем указать, для какого колонтитула (верхнего или нижнего) нужно задавать нумерацию в Word.

Коллекция PageNumbers – нумерация в Word

Свойства – нумерация страниц в Word

делаем нумерацию в ворд

ChapterPageSeparator - Возвращает или устанавливает разделитель, используемый между номером главы и страницы. Значение константы WdSeparatorType:

  • wdSeparatorColon - 2 - двоеточие.
  • wdSeparatorEmDash - 3 - подчеркнутое тире.
  • wdSeparatorEnDash - 4 - стандартное тире.
  • wdSeparatorHyphen - 0 - дефис.
  • wdSeparatorPeriod - 1 - период.

HeadingLevelForChapter - Возвращает или задает уровень заголовка (от 0 до 8), который применяется к названиям глав в документе.

IncludeChapterNumber – Значение true, если номер главы входит в номера страниц. Чтение и запись.

NumberStyle - Возвращает или задает значение константы WdPageNumberStyle, которая представляет собой стиль нумерации страниц в Word.

RestartNumberingAtSection – Если значение свойства установлено в true, то при вызове метода Add нумерация в ворде будет начинаться с числа 0. Если значение false – то нумерация будет начинаться с числа одни, а попытка переопределить начальный пункт нумерации ворд страницы с помощью свойства StartingNumber ничего не даст. Чтение и запись.

ShowFirstPageNumber – Значение true – происходит автоматическое добавление пункта для нумерации Word страницы в нижний колонтитул.

StartingNumber - Возвращает или устанавливает значение, которое определяет начало нумерации страниц в ворде. Указанный номер может быть виден или не виден на первой странице в зависимости от установок свойства ShowFirstPageNumber. Если свойство RestartNumberingAtSection установлено в false, то будет происходить переопределение свойства StartingNumber так, чтобы нумерация в Word продолжалась из предыдущего раздела

Application - Возвращает объект Application, представляющий приложение Microsoft Word.

Count - Возвращает число номеров страниц в коллекции. В большинстве случаев, колонтитулы содержат только один номер страницы, который является числом 1.

Методы – как сделать нумерацию в ворде

делаем нумерацию в word

Add (PageNumberAlignment, FirstPage) - Возвращает класс PageNumber, представляющий номера, добавленные в верхний или нижний колонтитул раздела. Оба параметра являются дополнительными.

PageNumberAlignment – Определяет положение номера, значение константы WdPageNumberAlignment:

  • wdAlignPageNumberLeft - 0 – По левому краю.
  • wdAlignPageNumberCenter - 1 - По центру.
  • wdAlignPageNumberRight - 2 – По правому краю.
  • wdAlignPageNumberInside - 3 – По левому краю.
  • wdAlignPageNumberOutside - 4 – По правому краю.

FirstPage – Если установлено значение false, то номер не добавляется к первой странице. Если этот аргумент опущен, параметры нумерации в ворде определяет свойство DifferentFirstPageHeaderFooter класса PageSetup.

Item (index) – Доступ к объекту PageNumber по его номеру в коллекции PageNumbers. Фактически, количество классов PageNumber ровно 1.

PageNumber – Нумерация в ворде

Свойства – нумерация страниц в ворде

нумерация в ворде страниц

Alignment - Возвращает или задает выравнивание для номера страницы. Значение константы WdPageNumberAlignment (смотрите выше).

Application - Возвращает объект Application, представляющий приложение Microsoft Word.

Index – Позиция элемента в коллекции. Только чтение.

Методы – как в ворде сделать нумерацию страниц

нумерация в word страниц

Copy () - Копирует заданный PageNumber в буфер обмена.

Cut ()- Вырезает указанный PageNumber из документа и помещает его в буфер обмена.

Delete () - Удаляет указанный PageNumber. Фактически, мы отменяем нумерацию в Word для выбранного колонтитула

Select () – Выбор указанного PageNumber. После использования этого метода, следует использовать свойство Selection для работы с выбранным элементом.

Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию. Я приведу два примера кода на языке VBScript и JScript сервера сценариев Windows Script Host:

Пример программного кода на языке VBSCRIPT:

Пример программного кода на языке JSCRIPT:

В данных примерах происходит создание двух документов, для каждого документа создается ссылка на класс Range (переменные oRange1 и oRange2). Это нужно для того, что бы мы смогли добавить текст или страницы в нужный документ. Далее происходит нумерация страниц в Word для первого и второго документа. В одном случаем мы связываем нумерацию страниц в ворд со стилями и списками (в документ будут добавлены заголовки, а номера страниц будут с ними связаны). В другом случаем мы просто задаем стиль нумерация Word для всех страниц и определяем, что нумерация ворд должна начинаться с цифры 5.

Спасибо за внимание. Автор блога Владимир Баталий

как сделать список word - ListGalleries коллекция

Коллекция ListGalleries является отправной точкой, чтобы сделать маркированный или нумерованный список в Word с помощью макросов VBA, или сценариев сервера Windows Script Host. По сути, коллекция хранит объекты ListGallery, которые представляют индивидуальный список, но, ни ListGalleries и ListGallery не содержат средств для формирования списка Word с нужными параметрами. Так, с практической стороны вам понадобится только одно свойство и один метод из коллекции и два свойства и один метод.

Для доступа к коллекции ListGalleries используется одноименное свойство класса Word.Application . Так как данный материал немного запутан, то давайте для начала рассмотрим свойства и метода коллекции и класса, а уже потом я постараюсь показать и объяснить, что и для чего нужно…

ListGalleries – свойства и методы, маркированный и нумерованный список в Word

создание нумерованного и маркированного списка в word

Count – Количество классов ListGallery в текущей коллекции

Item (index) – Позволяет получить доступ к ListGallery заданного типа.

index – Определяет тип списка в Word, содержит значение константы WdListGalleryType:

  • wdBulletGallery - 1 - маркированный список Word.
  • wdNumberGallery - 2 - нумерованный список Word.
  • wdOutlineNumberGallery - 3 - многоуровневый список.

ListGallery – свойства и методы, нумерованный и маркированный список в Word

создание маркированного и нумерованного списка в Word

ListTemplates - Возвращает ListTemplates, которая представляет все типы списков в Word для указанного списка в коллекции. Только чтение.

Modified (index) – Вернет значение True, если производились изменения в заданном шаблоне списка. Только чтение.

Reset (index) – Позволяет очистить созданный ранее шаблон (index – номер шаблона).

Хорошо, теперь давайте рассмотрим, как сделать список Word, и весь процесс….

Все мы знаем, чтобы сделать список в документе Word, в первую очередь надо выбрать нужные абзацы, после этого мы выбираем типы списков Word. За тип отвечают три вкладки:

  • Маркеры – содержит 7 типов маркеров и позволяет создать собственный список-маркер.
  • Нумерация – также содержит 7 вариантов нумерованного списка в Word и дает возможность создать собственный шаблон.
  • Многоуровневый список – также на выбор дается 7 готовых шаблонов и возможность сформировать собственный.

Аналогичные действия происходят, и тогда, когда надо программно сделать список в Word:

Сначала нам нужно получить доступ к коллекции ListGalleries через одноименное свойство класса Word Application.

Далее нужно получить доступ к ListGallery – мы можем или использовать свойство item (смотрите выше) или задать значение напрямую:

Обратите внимание, что мы передаем не номер класса, а его тип (всего три варианта).

После того, как мы определились с нужным типом списка в Word и получили доступ к ListGallery, нам нужно обратиться к свойству ListTemplates, которое позволяет получить доступ к одноименной коллекция:

Хорошо мы получили доступ к коллекции ListTemplates, давайте рассмотрим, для чего она нужна. Как упоминалось выше, для каждого из трех типов списков Word есть 7 заготовленных шаблонов. Фактически, каждый такой шаблон является классом ListTemplate, входящим в состав коллекции. Как и с объектом ListGallery, тут та же ситуация – мы передаем не номер, а тип.

ListTemplates – свойства и методы, как сделать список в Word

типы Word списков

Count – Количество классов ListTemplate. Только чтение.

Add (OutlineNumbered, Name) - Возвращает ListTemplate, представляющий новый шаблон списка. Оба параметра являются дополнительными.

OutlineNumbered – True - список будет многоуровневым, False - список содержит только один уровень вложенности.

Name – имя шаблона.

Item (count) - Возвращает отдельный объект ListTemplate в коллекции.

ListTemplate – свойства и методы, типы списков в Word

как сделать Word список

ListLevels - Возвращает ListLevels, представляющую все списки для указанного ListTemplate.

Name - Возвращает или задает имя указанного класса. Чтение и запись.

OutlineNumbered - Значение true, если указанный ListTemplate является многоуровневым. Чтение и запись.

Convert (level) – Позволяет конвертировать список: многоуровневый в одноуровневый, или наоборот.

level – Дополнительный параметр, который задает уровень вложенности списка Word. Этот аргумент может быть число от 1 до 9. Если этот аргумент опущен, то значение 1 - значение по умолчанию.

Последний этап, который, показывает как сделать список в Word – этап выбора уровня вложенности. По сути, нам надо получить доступ к коллекции ListLevels и объектам ListLevel. Так как данная коллекция и объект содержат довольно много методов и свойств, то я описал их в отдельной статье – "Коллекция Word ListLevels и объект ListLevel". Но, чтобы не предоставлять вам материал без примеров, мы сделаем два списка в Word, которые сможем многократно использовать. Я сначала приведу вам примеры кода, а уже потом объясню, что и как.

Пример на языке VBScript

Пример на языке JScript

Хорошо, теперь давайте разберем программный код. В обоих сценариях объявление практически одинаковые переменные, в примере на JS к именам я добавил единицу. oWord – хранит доступ к приложению Ворд: "Объект Word Application - свойства", oDoc – позволит создать новый документ: "Коллекция Word Documents", oSel – позволит выделять нужный текст: "Объект Word Selection - выделить весь текст в ворде, свойства", oPars – отвечает за обработку абзацев: "Объект Word Paragraph и коллекция Paragraphs - основные параметры абзаца", MyText – собственно, текст для вставки в документ, oRange – отвечает за выбор содержимого: "Объект Word Range - Выбор текста".

Видим, что в обоих сценариях мы создали два объекта List1 и List2, которые содержат отформатированный список Word. Далее происходит процесс вызова метода ApplyListTemplateWithLevel объекта ListFormat для заданного выбора, к нему и будет применяться сделанный в список Word. Видим, что основные параметры определяются через свойства объекта ListLevel.

Спасибо за внимание. Автор блога Владимир Баталий

Я хочу получить номер текущей страницы String, включая ее формат.
Например: некоторые разделы могут иметь идентификатор главы (1-1), некоторые в римском стиле и т. Д.

Я надеялся получить выбор конкретного нижнего колонтитула, затем перебрать поля и получить данные поля страницы («Вывод - это строка, которую я хочу»).

Насколько я вижу, нет возможности циклически перебрать нижние колонтитулы данного раздела, просто получите общий шаблон и попробуйте поработать с ним.
Мне известно о wdActiveEndAdjustedPageNumber из Selection.Range.Information , но это просто дает мне частичную информацию.

Я ошибаюсь? Можно ли выбрать определенный нижний колонтитул для работы?
Если нет, можете ли вы подсказать мне, как получить следующие данные:

  • Значение ближайшего номера главы
  • Получение значения номера страницы специального формата, такого как латинский алфавитный шрифт (имеется в виду применение формата страницы к wdActiveEndAdjustedPageNumber )

Изменить для пояснения:

В моем шаблоне слова стиль заголовка 1 создает следующий заголовок: Глава 1 , затем Глава 2 и т. Д.
В формате номера страницы есть возможность включить текущее значение главы в номер страницы.
Например: при условии следующей настройки


будет отображаться с этими страницами в поле < PAGE >: 1-1, 1-2, 1-3, . Моя цель - каким-то образом получить всю эту «ценность» для конкретного нижнего колонтитула.
Вот фрагмент кода, который не будет работать правильно:

Результатом такого метода является «1-1»
Причина, по которой он не работает, заключается в том, что он может извлечь только первую страницу (или вторую, используя wdHeaderFooterEvenPages ).

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

Есть ли способ получить доступ к любому нижнему колонтитулу в документе и выполнить мой пример кода?
Если нет, как я могу получить «значение» номера страницы для любого нижнего колонтитула, который я выберу?
Надеюсь, это понятнее.

Читайте также: