2010-09-03 27 views
6

Mi plantilla de MS Word 2007 tiene un pie de página con el nombre de archivo en él. El usuario abrirá la plantilla y hará un "Guardar como ..." para crear su documento.Desencadenar MS Word macro después del evento de guardar

Quiero el nombre del archivo se muestra en el pie de página para actualizar inmediatamente al nuevo nombre de archivo.

¿Existe un AfterSaveEvent o algo que pueda usar como un gancho para comenzar mi script VBA que hace la actualización?

¿O hay una manera mucho más fácil?

Respuesta

4

Basta con crear una macro como esto (creo que funciona mejor si se incluye en el Normal.dot)

Sub FileSaveAs() 
' 
' FileSaveAs Macro 
' Saves a copy of the document in a separate file 
' 
Dialogs(wdDialogFileSaveAs).Show 

'returns the name including the .doc extension 
ChosenFileNameAndExtension = ActiveDocument.Name 'Or use .FullName 

' Your code here 

End Sub 

Será activa cada vez que el usuario selecciona "Guardar como archivo"

HTH!

+0

Gracias por la respuesta. Mi técnico de TI está haciendo algunas pruebas ... lo marcará como aceptado si funciona. – blokeley

+0

@blokeley Por favor, publique un comentario con el resultado. ¡Buena suerte! –

+0

excelente, funcionó por primera vez. Publicaré la solución completa a continuación para otros. – blokeley

1

Esto funcionó basan en respuesta @belisarius':

Sub UpdateAll() 
    Dim oStory As Object 
    Dim oToc As Object 

    'Exit if no document is open 
    If Documents.Count = 0 Then Exit Sub 
    Application.ScreenUpdating = False 

    For Each oStory In ActiveDocument.StoryRanges 
     oStory.Fields.Update 'Update fields in all stories 
    Next oStory 

    For Each oToc In ActiveDocument.TablesOfContents 
     oToc.Update 'Update table of contents 
    Next oToc 

    Application.ScreenUpdating = True 
End Sub 

Sub FileSaveAs() 
' 
' FileSaveAs Macro 
' Saves a copy of the document in a separate file 
' 
Dialogs(wdDialogFileSaveAs).Show 

UpdateAll 


End Sub 
+0

¡Agradable! Gracias por publicarlo –

0

Sabemos que el evento Aftersave no está disponible para Microsoft Word. Pero Word nos permite usar el evento BeforeSave. Implementé esta solución y funciona bien.

En primer lugar tenemos que aplicar Application.onTime método en Word BeforeSave evento como sigue

Private Sub mobjWord_DocumentBeforeSave(ByVal Doc As Word.Document, SaveAsUI As Boolean, Cancel As Boolean) 
    Word.Application.OnTime Now + TimeValue("00:00:02"), "AfterSave" 
End Sub 

Este método llamará al método llamado AfterSave después de 2 segundos.

Public Sub AfterSave() 
    While Word.ActiveDocument.Application.BackgroundSavingStatus <> 0 
     DoEvents 
    Wend 
'Implement your code here 
End Sub 

En este método, el ciclo while se circulará hasta que se complete el proceso de guardado del documento. Entonces puede implementar su código después del ciclo while.

Cuestiones relacionadas