Macro pour mettre à jour tous les champs dans un document word

J'ai construit au fil des ans - une macro vba qui est censé mettre à jour tous les champs dans un document word.

J'ai appeler cette macro avant de publier le document pour examen afin de s'assurer que tous les en-têtes et pieds de page, etc sont corrects.

Actuellement - il ressembler à ceci:

Sub UpdateAllFields()
'
' UpdateAllFields Macro
'
'
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 = doc.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
If rngStory.StoryType <> wdMainTextStory Then
While Not (rngStory.NextStoryRange Is Nothing)
Set rngStory = rngStory.NextStoryRange
rngStory.Fields.Update
Wend
End If
End If
Next
For Each shp In doc.Shapes
If shp.Type <> msoPicture Then
With shp.TextFrame
If .HasText Then
shp.TextFrame.TextRange.Fields.Update
End If
End With
End If
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
' Header and footer too.
UpdateHeader
UpdateFooter
' 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
Sub UpdateFooter()
Dim i As Integer
'exit if no document is open
If Documents.Count = 0 Then Exit Sub
Application.ScreenUpdating = False
'Get page count
i = ActiveDocument.BuiltInDocumentProperties(14)
If i >= 1 Then 'Update fields in Footer
For Each footer In ActiveDocument.Sections(ActiveDocument.Sections.Count).Footers()
footer.Range.Fields.Update
Next
End If
Application.ScreenUpdating = True
End Sub
'Update only the fields in your footer like:
Sub UpdateHeader()
Dim i As Integer
'exit if no document is open
If Documents.Count = 0 Then Exit Sub
Application.ScreenUpdating = False
'Get page count
i = ActiveDocument.BuiltInDocumentProperties(14)
If i >= 1 Then 'Update fields in Header
For Each header In ActiveDocument.Sections(ActiveDocument.Sections.Count).Headers()
header.Range.Fields.Update
Next
End If
Application.ScreenUpdating = True
End Sub

J'ai remarqué récemment que parfois il manque quelques secions du document. Aujourd'hui c'est raté Premier pied de page -section 2- parce que la version du document n'a pas été mis à jour.

J'ai construit cette macro sur un certain nombre d'années et de plusieurs épisodes de la recherche, mais je ne suis pas fier de l'être, de sorte s'il vous plaît suggérer un remplacement complet s'il ya maintenant un moyen propre de le faire. Je suis à l'aide de Word 2007.

Pour tester, créez un document word et ajouter un champ personnalisé nommé Version et de lui donner une valeur. Alors utilisez ce champ {DOCPROPERTY Version \* MERGEFORMAT } dans autant d'endroits que vous pouvez. Les en-têtes, Pieds de page de la première page, page suivante, etc. etc. N'oubliez pas de faire une multi-section document avec des en-têtes/pieds de page. Puis modifiez la propriété et appeler la macro. Elle ne le fait actuellement tout à fait un bon travail, la manipulation de tables des matières et TOAs un des TOFs etc, il semble juste de sauter pieds de page (parfois) dans une multi-section document par exemple.

Modifier

Le défi document qui semble poser le plus de problèmes est structuré comme suit:

Il dispose de 3 sections.

La Section 1 de la page de titre et table des matières de sorte que la première page de cet article n'a pas d'en-tête/pied de page, mais ne l'utilisez les Version de propriété sur elle. Les pages suivantes ont numérotation des pages en chiffres romains pour les TOC.

La Section 2 est pour le corps du document et comporte des en-têtes et pieds de page.

La Section 3 est pour les droits d'auteur de blurb, et c'est très étrange d'en-tête et d'un coupe-bas de pied de page.

Tous les pieds de page contiennent les Version propriété de document personnalisé.

Mon code ci-dessus semble fonctionner dans tous les cas, sauf parfois, il manque le premier pied de page des sections 2 et 3.

Pourquoi ne pas mettre à jour directement tous les Champs dans le Document avec ActiveDocument.Fields.Update? Ou directement à partir de l'application au niveau Application.Fields.Update?Ne manquez certaines d'entre eux aussi?
ActiveDocument.Fields.Update fait presque rien. Application.Fields.Update donne une erreur Method or data member not found sur le Fields objet.
Ok. Et ne vous ont rien d'autre qui est lié, mais peut-être pas dans les Champs? Tels Que Des Graphiques, ...? Je n'ai jamais utilisé l'application au niveau de mon auto, j'ai juste trouvé que .Fields sont les enfants de niveau de l'Application...
Documents graphiques (mais rarement) et si la macro manque à eux, je serai heureux de creuser des changements à gérer. Pour l'instant je serais heureux avec un correctif à l'absence de Premier pied de page -section 2-. Si cela le rend plus simple aussi, il serait un bonus.
Pour les cartes, j'ai eu à mettre à jour les liens dans certains modèles d'un système de reporting, voici ma question avec quelques choses qui devraient vous aider pour les graphiques : stackoverflow.com/questions/30958172/...

OriginalL'auteur OldCurmudgeon | 2015-11-16