Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2009, 06:24   #11
БуреВестник
Пользователь
 
Регистрация: 19.09.2009
Сообщений: 69
По умолчанию

Да проверил, вроде работает.
Только вот что я заметил: при использовании Разрыва раздела с нечётной страницы пустая страница является первой страницей соответствующего раздела - это видно на предварительном просмотре в строке состояние. Странно как-то.
БуреВестник вне форума Ответить с цитированием
Старый 13.10.2009, 06:39   #12
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Ну и на самый конец

Я все-таки приложу еще один файл, т.к. внес исправление в код поля, чтобы дробный номер страницы не отображался на последней нечетной странице последнего раздела, теперь код поля выглядит так:
Код:
{ IF {=(({ =MOD({ PAGE };2) }<>0)*({PAGE}={=INT({ DOCVARIABLE { QUOTE Sec{ SECTION }PageCount } }) })*({ PAGE }<{ NUMPAGES }) )} = 1 { QUOTE { PAGE }/{ =SUM({ PAGE };1) } } { PAGE } }
Вложения
Тип файла: doc Нумерация по ГОСТ.doc (72.0 Кб, 21 просмотров)
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 13.10.2009 в 06:44.
viter.alex вне форума Ответить с цитированием
Старый 13.10.2009, 08:15   #13
akokin
Пользователь
 
Регистрация: 02.08.2008
Сообщений: 94
По умолчанию

Ну, что можно сказать? Александр, спасибо огромное!
Сам бы я не дошурупил однозначно.
akokin вне форума Ответить с цитированием
Старый 20.10.2009, 15:23   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Неожиданное продолжение

Тема получила неожиданное продолжение.
Автор вопроса меня справедливо упрекнул в том, что я не ознакомился с ГОСТом ГОСТ18675-79, согласно которому нужно делать нумерацию. Грешен, не ознакомился, но только из-за неправильной оценки сложности задачи.
Оказывается, этот ГОСТ устанавливает правила для «Документации эксплуатационной и ремонтной на авиационную технику и покупные изделия для нее», т.е. все очень серьезно.
Согласно этому ГОСТу каждый раздел имеет свою нумерацию: первый нумеруется с 1, второй со 101, третий с 201 и т.д. Поэтому предложенный мной метод не совсем подходит и нуждается в доработке.
Я его доработал. Теперь в переменные документа, в которых хранятся номера страниц, которыми заканчивается раздел, записываются не реальные номера страниц, а те, которые заданы пользователем для данного раздела. Кроме того, пришлось добавить переменную, в которой хранится количество разделов в документе. Поле почти не изменилось (изменения выделил красным цветом):
{ IF {=(({ =MOD({ PAGE };2) }<>0)*({PAGE}={=INT({ DOCVARIABLE { QUOTE Sec{ SECTION }PageCount } }) })*({ SECTION }<>{ DOCVARIABLE "SectionsCount"}) )} = 1 { QUOTE { PAGE }/{ =SUM({ PAGE };1) } } { PAGE } }
Макрос я лишь слегка дополнил, чтобы добавлял переменную документа с количеством разделов и брал нумерацию страниц, введенную пользователем (выделено красным):
Код:
Sub GOSTNumbering()
'Такое название потому, что я считаю глупым следовать стандартам,
'разработанным бог знает когда и не несущим практической пользы
  On Error Resume Next
  Dim oSec As Section 'Переменная для перечисления разделов
  Dim nPagesCountEndSec As Long 'Количество страниц, заполненных текстом, до конца раздела
  Dim ovar As Variable 'Переменная для перечисления переменных документа
  
  For Each oSec In ActiveDocument.Sections
    'Количество страниц до конца раздела
    nPagesCountEndSec = oSec.Range.Information(wdActiveEndAdjustedPageNumber)
    'Добавляем переменную в документ
    ActiveDocument.Variables.Add "Sec" & oSec.Index & "PageCount", nPagesCountEndSec
    If Err.Number = 5903 Then 'Если такая переменная в документе уже есть
      'Обновляем значение переменной
      ActiveDocument.Variables("Sec" & oSec.Index & "PageCount").Value = nPagesCountEndSec
      'Очищаем ошибку
      Err.Clear
    End If
  Next
  'Записываем в переменную количество разделов в документе
  ActiveDocument.Variables.Add "SectionsCount", ActiveDocument.Sections.Count
  If Err.Number = 5903 Then 'Если такая переменная в документе уже есть
    'Обновляем значение переменной
    ActiveDocument.Variables("SectionsCount").Value = ActiveDocument.Sections.Count
    'Очищаем ошибку
    Err.Clear
  End If

  'Обновляем поля в документе
  ActiveDocument.Fields.Update
  'Это для контроля имен переменных и их значений. На
  'функциональность это не влияет.
  For Each ovar In ActiveDocument.Variables
    Debug.Print ovar.Name & vbTab & ovar.Value
  Next
End Sub
Вложения
Тип файла: doc Нумерация по ГОСТ (1).doc (112.0 Кб, 17 просмотров)
Лучше день потерять — потом за пять минут долететь!©

Последний раз редактировалось viter.alex; 20.10.2009 в 20:09. Причина: Приложил файл
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Статус страницы! nikolai_P PHP 6 17.09.2009 10:03
Страницы Grek55 Софт 2 06.05.2009 11:34
Динамическое изменение URL страницы в JavaScript без перезагрузки страницы ilusha JavaScript, Ajax 7 25.02.2009 09:59
Как сделать разрыв страницы печати по условию и узнать номер страницы Leanna Microsoft Office Excel 2 21.01.2008 06:59
разметка страницы. Gambler Microsoft Office Word 0 29.10.2006 21:24