2010-09-03 14 views
6

Il modello MS Word 2007 ha un piè di pagina con il nome file. L'utente sta per aprire il modello e fare un "Salva come ..." per rendere il loro documento.Trigger MS Word macro dopo evento di salvataggio

Desidero che il nome file visualizzato nel piè di pagina si aggiorni immediatamente al nuovo nome file.

C'è un AfterSaveEvent o qualcosa che posso usare come un gancio per avviare il mio script VBA che esegue l'aggiornamento?

O c'è un modo molto più semplice?

risposta

4

Basta creare una macro come questo (credo che funziona meglio se inclusi nel 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 

Esso sarà attivato ogni volta che l'utente seleziona "File Salva con nome"

HTH!

+0

Grazie per la risposta. Il mio addetto IT sta facendo alcuni test su di esso ... segnerà questo come accettato se funziona. – blokeley

+0

@blokeley Si prega di inviare un commento con il risultato. In bocca al lupo! –

+0

eccellente, ha funzionato la prima volta. Pubblicherò la soluzione completa qui sotto per gli altri. – blokeley

1

questo ha lavorato in base alla risposta @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

Bello! Grazie per averlo pubblicato –

0

Sappiamo che l'evento Aftersave non è disponibile per Microsoft Word. Ma Word ci consente di utilizzare l'evento BeforeSave. Ho implementato questa soluzione e funziona bene.

Prima dobbiamo implementare Application.onTime metodo in Word BeforeSave evento come segue

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 

Questo metodo chiamerà il metodo chiamato AfterSave dopo 2 secondi.

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

In questo metodo il ciclo while verrà fatto circolare fino al completamento del processo di salvataggio del documento. Quindi puoi implementare il tuo codice dopo il ciclo while.