Как обновить все поля в документе Word?

Я хочу способ обновления все поля в документе Word 2013. (Если он работает в других версиях, тем лучше; у меня первоначально была эта проблема с Word 2007, и с тех пор ничего не изменилось.) Это включает перекрестные ссылки, номера страниц, оглавлений, индексов, заголовков и т. д. Если он может быть обновлен нажатием F9, Я хочу его обновить.

(теоретически обновление полей может привести к необходимости обновления других полей, например, более длинной таблицы содержание изменяет некоторые номера страниц в основном тексте. Забота об обычных делах достаточно хороша для меня. На самом деле, это нормально, если я запустить макрос два или три раза, прежде чем он стабилизируется. Я просто хочу иметь один макрос, который находит все.)

моя попытка до сих пор не обновляет поля в текстовых полях внутри рисунков. Как их обновить и что еще я пропустил?


EDIT: комбинируя ответ, данный с тем, что я уже had дает макрос, который, кажется, обновляет все (с помощью известный дефект).

'' Update all the fields, indexes, etc. in the specified document.
Sub UpdateAllFieldsIn(doc As Document)
    '' Update tables. We do this first so that they contain all necessary
    '' entries and so extend to their final number of pages.
    Dim toc As TableOfContents
    For Each toc In doc.TablesOfContents
        toc.Update
    Next toc
    Dim tof As TableOfFigures
    For Each tof In doc.TablesOfFigures
        tof.Update
    Next tof
    '' Update fields everywhere. This includes updates of page numbers in
    '' tables (but would not add or remove entries). This also takes care of
    '' all index updates.
    Dim sr As range
    For Each sr In doc.StoryRanges
        sr.Fields.Update
        While Not (sr.NextStoryRange Is Nothing)
            Set sr = sr.NextStoryRange
            '' FIXME: for footnotes, endnotes and comments, I get a pop-up
            '' "Word cannot undo this action. Do you want to continue?"
            sr.Fields.Update
        Wend
    Next sr
End Sub
'' Update all the fields, indexes, etc. in the active document.
'' This is a parameterless subroutine so that it can be used interactively.
Sub UpdateAllFields()
    UpdateAllFieldsIn ActiveDocument
End Sub
24
задан Community
19.04.2023 12:05 Количество просмотров материала 2469
Распечатать страницу

6 ответов

зайдите в настройки печати, выберите Обновить поля. Затем перейдите в раздел Печать или предварительный просмотр документа.

Et voilà, все поля обновлены!

MS Word Print Options from Word of Mac 2016

32
отвечен David Roussel 2023-04-20 19:53

Я просто делаю Ctrl+на - выбрать все - и затем F9 обновить много.

хотя, это не заголовки и нижние колонтитулы, но они обновляются при печати/печати МСИО.


обновление

Я нашел следующий макрос. На быстрый тест обновления оглавления, поля в пунктах, поля в колонтитулы и поля в плавающий текст диаграмма коробки.

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

источник:http://www.gmayor.com/installing_macro.htm

Sub UpdateAll()
    Dim oStory As Range
    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
        If oStory.StoryType <> wdMainTextStory Then
            While Not (oStory.NextStoryRange Is Nothing)
                Set oStory = oStory.NextStoryRange
                oStory.Fields.Update
            Wend
        End If
    Next oStory
    Set oStory = Nothing
End Sub
78
отвечен DMA57361 2023-04-20 22:10

этой страница выглядит интересно:

Если вы используете Word 2007, процесс немного отличается: нажмите Кнопка Office и нажмите кнопку Word Опционы. Слово отображает слово Диалоговое окно. Нажмите Дополнительно в левой части диалогового окна. (Щелкните здесь, чтобы увидеть связанную фигуру.) В общей области (прокрутите немного вниз чтобы увидеть его), убедитесь, что обновление Флажок автоматические ссылки при открытии выбирать. Нажмите OK. Эта настройка следует убедиться, что все ваши ссылки всегда в актуальном состоянии. Если вы хотите обновите поля, когда документ открытый, вам нужно использовать макрос для выполнить задачу. Конкретно, вам нужно будет использовать либо AutoOpen или Автозакрытия макрос, в зависимости от хотите ли вы обновить поля при открытии или закрытии документа. Тот ниже приведен пример AutoOpen макрос можно использовать.

Sub AutoOpen()
    With Options
        .UpdateFieldsAtPrint = True
        .UpdateLinksAtPrint = True
    End With
    ActiveDocument.Fields.Update
End Sub

обратите внимание, что макрос делает, что что параметры установлены на force обновление полей и ссылок при происходит печать, затем она обновляет все члены коллекции полей в документе. Если вы, вместо этого, хотел обновить поля на закрывая, вы можете использовать этот макрос:

Sub AutoClose()
    ActiveDocument.Fields.Update
End Sub

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

5
отвечен 2023-04-21 00:27

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

    Dim oStory As Range
    Dim oSection As Object
    Dim oHeader As Object
    Dim oFooter As Object

    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
    Next oStory

        For Each oSection In ActiveDocument.Sections
             For Each oHeader In oSection.Headers
                 oHeader.Range.Fields.Update
             Next oHeader

             For Each oFooter In oSection.Footers
                 oFooter.Range.Fields.Update
             Next oFooter
        Next oSection
3
отвечен Yohnny 2023-04-21 02:44

Word 2010:

щелкните правой кнопкой мыши ленту, настроить ленту, выберите команду из "все команды" поиск "обновление" и добавить его, где вы хотите.

эта кнопка обновляет только выбранные поля.

Затем, чтобы обновить все поля, нажмите Ctrl + на затем эта кнопка.

2
отвечен rlaviolette 2023-04-21 05:01

Для C#:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Office.Interop.Word;

class Program
{
    static void Main(string[] args)
    {
        List<string> path = new List<string>(args);

        string filePathstr = string.Join(" ", path.ToArray());
        //System.Windows.Forms.MessageBox.Show("filepathstr: " + filePathstr);

        string folderPathstr = Path.GetDirectoryName(filePathstr);
        //System.Windows.Forms.MessageBox.Show("folderPathstr: " + folderPathstr);

        try
        {
            Application ap = new Application();
            Document document = ap.Documents.Open(filePathstr);
            document.Fields.Update();

            foreach (Section section in document.Sections)
            {
                document.Fields.Update();  // update each section

                HeadersFooters headers = section.Headers;  //Get all headers
                foreach (HeaderFooter header in headers)
                {
                    Fields fields = header.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  // update all fields in headers
                    }
                }

                HeadersFooters footers = section.Footers;  //Get all footers
                foreach (HeaderFooter footer in footers)
                {
                    Fields fields = footer.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  //update all fields in footers
                    }
                }
            }    

            document.Save();
            document.Close();

        }
        catch (NullReferenceException)
        {
            System.Windows.Forms.MessageBox.Show("A valid file was not selected.");
        }
    }
}
2
отвечен Sherd 2023-04-21 07:18

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх