Обновление всех полей текстбоксах в колонтитулах

Программирование на Visual Basic for Applications
russo78
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 14.01.2010 (Чт) 11:42

Обновление всех полей текстбоксах в колонтитулах

Сообщение russo78 » 08.02.2010 (Пн) 13:08

Word 2007
Необходимо обновить все поля в текстбоксах, которые (текстбоксы) сгруппированы и расположены в колонтитулах. Обновление необходимо выполнить во всех секциях документа.
Для этого использую следующую конструкцию:
Код: Выделить всё
    For Each oSection In ActiveDocument.Sections
        For Each oHeaderFooter In oSection.Footers
            For Each oShape In oHeaderFooter.Shapes
                If oShape.Type = msoGroup Then
                    For Each oItem In oShape.GroupItems
                        If oItem.Type = msoTextBox Then
                            Set oTextFrame = oItem.TextFrame
                            If oTextFrame.TextRange.Fields.Count <> 0 Then
                               oTextFrame.TextRange.Fields.Update
                            End If
                        End If
                    Next oItem
                End If
            Next oShape
        Next oHeaderFooter
    Next oSection


Все работает, но такой тотальный перебор занимает очень много времени. Можно как-то оптимизировать код, чтобы меньше перебирать элементов? А то получается при 9-15 полях, которые нужно обновить, он перебирает гораздо больше елементов (нужно еще учесть, что в группы входят и линии и другие шейпы). Спасибо.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Обновление всех полей текстбоксах в колонтитулах

Сообщение viter.alex » 10.02.2010 (Ср) 21:06

Поля во всём документе обновляются при предварительном просмотре. Поэтому предлагаю такой вариант:
Код: Выделить всё
  Application.ScreenUpdating = False
  ActiveDocument.PrintPreview
  ActiveDocument.ClosePrintPreview
  Application.ScreenUpdating = True

Не знаю, может быть это зависит от каких-то настроек, но у меня поля обновляются.
Лучше день потерять — потом за пять минут долететь!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Обновление всех полей текстбоксах в колонтитулах

Сообщение Денис » 10.02.2010 (Ср) 22:14

viter.alex писал(а):предлагаю такой вариант

Это хак. В общем случае к использованию не рекомендуется. Но если надо срочно, то на войне все средства хороши!
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Обновление всех полей текстбоксах в колонтитулах

Сообщение viter.alex » 10.02.2010 (Ср) 22:32

Почему это хак? Что я делаю не по правилам?
Лучше день потерять — потом за пять минут долететь!

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Обновление всех полей текстбоксах в колонтитулах

Сообщение Денис » 11.02.2010 (Чт) 8:52

viter.alex писал(а):Почему это хак? Что я делаю не по правилам?

cсамсказал, что не знаешь, может это поведение от настроек зависит. но главное: никто не гарантирует подобное поведение приложения в следующих версиях.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Обновление всех полей текстбоксах в колонтитулах

Сообщение viter.alex » 11.02.2010 (Чт) 9:24

Думал, что зависит от опции "Обновлять поля перед печатью", но работает и в случае, если опция снята. Проверено в Word 2003, 2007


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList