Tim ha creato una semplice macro per aggiornare tutti i campi in un modello. La macro include un passaggio che seleziona l’intero documento, proprio come premere Ctrl + A. Questo passaggio non seleziona intestazioni e piè di pagina e Tim teme che ci possano essere campi da aggiornare in quelle posizioni. Si chiede se esiste un modo per includere intestazioni e piè di pagina quando si seleziona tutto o se esiste un modo diverso per la sua macro di aggiornare i campi nelle aree dell’intestazione o del piè di pagina.

La semplice risposta è che è necessario modificare il codice della macro in modo che in tutte le diverse aree di Word sia presente che potrebbero esserci campi. Il problema con l’utilizzo di un approccio “seleziona tutto” è che seleziona solo il testo nel documento principale. Intestazioni, piè di pagina e una miriade di altri elementi vengono mantenuti in livelli separati che ne impediscono la selezione con tutto il testo del documento.

Se vuoi semplicemente aggiornare i campi nel testo principale e nelle intestazioni e nei piè di pagina, allora dovresti usare una tecnica come la seguente:

Sub MyUpdateFields1()

ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update End Sub

Notare che i diversi livelli di un documento sono indicati come “storie” e mantenuti all’interno della propria raccolta. Mentre questa semplice macro aggiorna molto rapidamente i campi nelle storie contenenti il ​​testo principale, i piè di pagina e le intestazioni, ci sono altre storie (livelli)

dove potrebbero esserci campi che richiedono un aggiornamento. La macro seguente esamina ogni storia, indipendentemente dal suo tipo, e fa l’aggiornamento richiesto:

Sub MyUpdateFields2()

Dim story As Word.Range

For Each story In ActiveDocument.StoryRanges         Do             story.Fields.Update             ' Check linked stories as linked stories are not independent             Set story = story.NextStoryRange         Loop Until (story Is Nothing)

Next End Sub

Se vuoi davvero essere completo, tuttavia, c’è molto di più che i diversi livelli della storia che devi esaminare. Ad esempio, è possibile che alcuni campi contenuti all’interno di caselle di testo debbano essere aggiornati. È necessaria una macro più completa per gestire tutti questi altri luoghi in cui potrebbero essere localizzati i campi. Nell’esempio seguente, notare i molti diversi elementi del documento che possono essere controllati per i campi.

Sub MyUpdateFields3()

Dim doc As Document ' Pointer to Active Document     Dim wnd As Window ' Pointer to Document's Window     Dim lngMain As Long ' Main Pane Type Holder     Dim lngSplit As Long ' Split Type Holder     Dim lngActPane As Long ' ActivePane Number     Dim rngStory As Range ' Range Objwct for Looping through Stories     Dim TOC As TableOfContents ' Table of Contents Object     Dim TOA As TableOfAuthorities 'Table of Authorities Object     Dim TOF As TableOfFigures 'Table of Figures Object     Dim shp As Shape

' Set Objects     Set doc = ActiveDocument     Set wnd = ActiveDocument.ActiveWindow

' get Active Pane Number     lngActPane = wnd.ActivePane.Index

' Hold View Type of Main pane     lngMain = wnd.Panes(1).View.Type

' Hold SplitSpecial     lngSplit = wnd.View.SplitSpecial

' Get Rid of any split     wnd.View.SplitSpecial = wdPaneNone

' Set View to Normal     wnd.View.Type = wdNormalView

' Loop through each story in doc to update     For Each rngStory In doc.StoryRanges         If rngStory.StoryType = wdCommentsStory Then             Application.DisplayAlerts = wdAlertsNone             ' Update fields             rngStory.Fields.Update             Application.DisplayAlerts = wdAlertsAll         Else            ' Update fields            rngStory.Fields.Update         End If     Next

For Each shp In doc.Shapes         With shp.TextFrame             If .HasText Then                 shp.TextFrame.TextRange.Fields.Update             End If         End With     Next

' Loop through TOC and update     For Each TOC In doc.TablesOfContents         TOC.Update     Next

' Loop through TOA and update     For Each TOA In doc.TablesOfAuthorities         TOA.Update     Next

' Loop through TOF and update     For Each TOF In doc.TablesOfFigures         TOF.Update     Next

' Return Split to original state     wnd.View.SplitSpecial = lngSplit

' Return main pane to original state     wnd.Panes(1).View.Type = lngMain

' Active proper pane     wnd.Panes(lngActPane).Activate

' Close and release all pointers     Set wnd = Nothing     Set doc = Nothing End Sub

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (11489) si applica a Microsoft Word 2007 e 2010. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Word qui: