jueves, 19 de noviembre de 2009

Macro actualizar campos Ms Word

Algo muy común cuando usamos Sharepoint, sobretodo WSS para intranets, es tener plantillas de documentos con campos en los que se muestran algunos metadatos del ítem.

El otro día me comentó un cliente que estos campos no se actualizaban automáticamente y muchos usuarios guardaban el documento sin actualizar los campos, lo cual era un problema para ellos. La solución fue práctiacamente instantánea; una macro que actualice dichos campos al abrir el documento de forma automática:

 Dim rango As Range 
Dim campo As Field
For Each rango In ActiveDocument.StoryRanges
For Each campo In rango.Fields
campo.Update
Next campo
Next rango

Espero que os resulte útil.

Un saludo.

4 comentarios:

Jose dijo...

Me alegro!

Un saludo.

Anónimo dijo...

Hola amigo es presisamente lo que nado buscando pero de programacion nada, he habierto el vb de word y pegado el codigo pero el campo no se actualiza podria hecharme una mano porfavor

Anónimo dijo...

Esta muy bueno, pero, que pasa si los campos estan como pie de pagina o encabazo, la macro no funciona, Saludos!

Anónimo dijo...

Esta macro la realicé a partir de este blog.
Incluye actualización de Tablas de Contenido (TOC) y tabla de Figuras. Incluye actualización de Encabezado y pie de página.

Estoy seguro que se puede mejorar pero se me acabó el tiempo para depurarla.


Sub Felder_aktualisieren()
'

Selection.WholeStory
Selection.Fields.Update
Selection.HomeKey Unit:=wdStory

If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If

If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If


Dim rango As Range
Dim campo As Field
Dim Sect As Section


If ActiveDocument.TablesOfFigures.Count >= 1 Then
ActiveDocument.TablesOfFigures(1).Update
End If

If ActiveDocument.TablesOfContents.Count >= 1 Then
ActiveDocument.TablesOfContents(1).Update
End If



Dim Foot As HeaderFooter
Dim Head As HeaderFooter

For Each Sect In ActiveDocument.Sections
For Each Foot In Sect.Footers
For Each campo In Foot.Range.Fields
campo.Update
Next campo
Next Foot

For Each Head In Sect.Headers
For Each campo In Head.Range.Fields
campo.Update
Next campo

Next Head
Next Sect


End Sub