Статьи из блога

Статьи из блога

Запрет обновления полей с разорванными связями

Рубрика: Вопрос-Ответ, Макросы, Настройка Word
Метки: | |
Среда, 17 декабря 2008 г.
Просмотров: 9150
Подписаться на комментарии по RSS
Версия для печати

[Ссылки на статью]

Сергей поинтересовался:

Прошу Вас рассказать, как в WORD 2003 запретить обновление полей во всем документе (включая колонтитулы) при печати этого документа.

Чтобы текстовые поля документа не обновлялись при печати, снимите флажок с опции "Обновлять поля" и "Обновлять связи" из вкладки Печать диалогового окна Параметры (меню Сервис - команда Параметры).

 

Позже Сергей уточнил свой вопрос и сообщил новые данные:

Проблема в том, что поля в документе имеют разорванные связи и документ при открытии выглядит как обычно, но, если его распечатать или перевести в PDF, то поля в документе обновляются, а обновляться неоткуда, и вместо текста появляется код данного поля. Поэтому приходиться вручную запрещать обновление каждого поля, что существенно снижает преимущество донного способа оформления.

В этом случае попробуйте следующий макрос, запрещающий обновление полей во всем документе и во всех разделах, в колонтитулах и в надписях, которые содержаться в колонтитулах:

Sub fieldLocked()
'Запрет на обновление полей документа во всем документе и во всех разделах
Dim aStory As Range
Dim oSection As Section
Dim HF As HeaderFooter
Dim aField As Field
Dim rngStory As Word.Range
Dim oShp As Word.Shape
'Запрет обновления полей во всем тексте
For Each aStory In ActiveDocument.StoryRanges
  For Each aField In aStory.Fields
    aField.Locked = True
  Next aField
Next aStory
'Запрет обновления полей в колонтитулах
For Each oSection In ActiveDocument.Sections
   For Each HF In oSection.Headers
      HF.Range.Fields.Locked = True
   Next HF
   For Each HF In oSection.Footers
      HF.Range.Fields.Locked = True
   Next HF
Next oSection
'Запрет обновления полей в надписях в колонтитулах
For Each rngStory In ActiveDocument.StoryRanges
    Do
        On Error Resume Next
        rngStory.Fields.Update
        Select Case rngStory.StoryType
            Case 6, 7, 8, 9, 10, 11
                If rngStory.ShapeRange.Count > 0 Then
                    For Each oShp In rngStory.ShapeRange
                        If oShp.TextFrame.HasText Then
                            oShp.TextFrame.TextRange.Fields.Locked = True
                        End If
                    Next oShp
                End If
            Case Else
                'Do Nothing
        End Select
        On Error GoTo 0
        'Get next linked story (if any)
        Set rngStory = rngStory.NextStoryRange
    Loop Until rngStory Is Nothing
Next rngStory
End Sub

Чтобы вернуть возможность автоматического обновления полей, можно использовать этот же макрос, но заменив в нем свойство "Locked = True" на "Locked = False".

 

Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 4

  1. Константин
    15.04.2009 в 09:32 | #1

    Почему после прямого и обратного применения данного макроса исчезают созданные рисунки? Как этого избежать?

    Вставленные рисунки остаются на месте.

  2. LVV
    14.01.2010 в 17:51 | #2

    сорри, правильнаое сочетание- CTRL+Shift+F9

  3. 14.01.2010 в 17:53 | #3

    если поля и связи в документе больше не нужны, то выделите их и преобразуйте в текст, нажав Ctrl+Shift+F9

  4. Александр
    12.05.2012 в 15:07 | #4

    Подскажите. какой командой можно определить находится курсор в редактируем поле или в поле запрещенном для редактирования

Оставьте комментарий!

(обязательно)

^ Наверх