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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 17:11   #1
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию Обновление полей во всем документе

Обновляю поля примерно так
Код:
Selection.WholeStory
Selection.Fields.Update
При этом возникает две проблемы:
1. Поля в колонтитулах не обновляются
2. Содержание не обновляется целиком
Собственно, надо их решить.
cw_o вне форума Ответить с цитированием
Старый 25.01.2013, 18:51   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код обновляет поля во всех колонтитулах и первом содержании:
Код:
Sub Procedure_1()

    Dim mySection As Word.Section
    Dim myHeaderFooter As Word.HeaderFooter
    
    '1. Проходимся по каждому разделу.
    For Each mySection In ActiveDocument.Sections
    
        '1.1. Проходимся по верхнему колонтитулу.
        'Проходимся по каждому виду верхнего колонтитула.
        'Есть 3 вида колонтитулов.
        For Each myHeaderFooter In mySection.Headers
            myHeaderFooter.Range.Fields.Update
        Next myHeaderFooter
        
        '1.2. Проходимся по нижнему колонтитулу.
        'Проходимся по каждому виду нижнего колонтитула.
        For Each myHeaderFooter In mySection.Footers
            myHeaderFooter.Range.Fields.Update
        Next myHeaderFooter
        
    Next mySection
    
    '3. Содержание можно так принудительно обновить.
    'В документе может быть несколько содержаний, поэтому
        'в скобках нужно указать порядковый номер содержание.
    'Если содержание одно, то всё-равно в скобках надо указать
        'порядковый номер.
    ActiveDocument.TablesOfContents(1).Update

End Sub
Скрипт вне форума Ответить с цитированием
Старый 25.01.2013, 18:55   #3
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Код обновляет все поля в основной части документа (есть ещё колонтитулы и другое):
Код:
Sub Procedure_2()
    
    'Обновление всех полей в документе без выделения всего документа.
    ActiveDocument.Fields.Update

End Sub
Скрипт вне форума Ответить с цитированием
Старый 26.01.2013, 02:55   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Макрос, обновляющий поля везде: в основном тексте, в колонтитулах, надписях и т.д. Используется факт, что поля обновляются всегда при предварительном просмотре.
Код:
Sub UpdateAllFields()
  Application.ScreenUpdating = False 'Отключение обновления экрана
  ActiveDocument.PrintPreview 'Предварительный просмотр
  ActiveDocument.ClosePrintPreview 'Закрыть предварительный просмотр
  Application.ScreenUpdating = True 'Обновить экран
End Sub
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.01.2013, 08:11   #5
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

viter.alex, а в Word 2010 без VBA предусмотрены кнопки для вызова режима "Предварительный просмотр"?

С помощью VBA да, в Word 2010 отображается режим "Предварительный просмотр".
Скрипт вне форума Ответить с цитированием
Старый 26.01.2013, 16:57   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Есть такая кнопка, можно вывести на панель быстрого доступа

Но я предпочитаю сочетание клавиш Ctrl+F3. По умолчанию оно не работает, но легко вешается на команду PrintPreviewEditMode
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 26.01.2013, 20:49   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

По умолчанию Ctrl+F2.
Цитата:
Сообщение от viter.alex Посмотреть сообщение
...поля обновляются всегда при предварительном просмотре.
Так, значит, получается, что Word и так управляется с обновлением всех полей, без лишних кодов?
Sasha_Smirnov вне форума Ответить с цитированием
Старый 26.01.2013, 20:59   #8
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Именно! Сам и справляется. Код нужен просто, чтобы съэкономить пару кликов мышкой
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 28.01.2013, 09:08   #9
cw_o
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 92
По умолчанию

viter.alex,
спасибо за решение, быстро работает, только содержание не обновляет.
ActiveDocument.TablesOfContents(1). Update обновляет.
cw_o вне форума Ответить с цитированием
Старый 28.01.2013, 09:15   #10
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Да, начиная с "Word 2007" появился новый вид оглавления. В этом оглавлении в программе "Word 2010" не происходит обновление полей при использовании режима "Предварительный просмотр" (который использовался в предыдущих версиях программы Word).


Примечание

Режим "Предварительный просмотр" был в программах Word до программы "Word 2010".

Последний раз редактировалось Скрипт; 28.01.2013 в 09:25.
Скрипт вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое обновление полей tissot Microsoft Office Word 11 15.10.2015 20:36
Поиск во всем документе Word, включая колонтитулы, надписи, примечания и сноски !abiturient! Microsoft Office Word 7 11.07.2012 18:35
Как преобразовать значение полей в документе в текст dima9 Microsoft Office Word 14 22.10.2011 21:28
обновление полей Word Jaroslav Microsoft Office Excel 0 06.05.2010 19:06
Обновление полей со списком katrina-n Microsoft Office Access 3 18.12.2009 20:33