Includere intestazioni e piè di pagina quando si seleziona tutto (Microsoft Word)
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: