2010-09-03 14 views
6

Mon modèle MS Word 2007 comporte un pied de page portant le nom du fichier. L'utilisateur va ouvrir le modèle et faire un "Enregistrer sous ..." pour faire leur document.Déclenchement de la macro MS Word après l'enregistrement

Je souhaite que le nom de fichier affiché dans le pied de page soit immédiatement mis à jour au nouveau nom de fichier.

Y at-il un AfterSaveEvent ou quelque chose que je peux utiliser comme un crochet pour démarrer mon script VBA qui fait la mise à jour?

Ou y a-t-il un moyen beaucoup plus facile?

Répondre

4

il suffit de créer une macro comme ça (je crois qu'il fonctionne mieux si elle est incluse dans le 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 

Il sera activé chaque fois que l'utilisateur sélectionne « Enregistrer le fichier sous »

HTH!

+0

Merci pour la réponse. Mon informaticien est en train de faire des tests dessus ... il va marquer cela comme accepté si ça marche. – blokeley

+0

@blokeley S'il vous plaît poster un commentaire avec le résultat. Bonne chance! –

+0

excellent, ça a marché la première fois. Je posterai la solution complète ci-dessous pour les autres. – blokeley

1

Cela a marché basé sur la réponse de @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

Nice! Merci de l'avoir posté –

0

Nous savons que l'événement Aftersave n'est pas disponible pour Microsoft Word. Mais Word nous permet d'utiliser l'événement BeforeSave. J'ai implémenté cette solution et ça marche bien.

D'abord, nous devons mettre en œuvre la méthode Application.onTime en cas de mots BeforeSave comme suit

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 

Cette méthode appellera la méthode appelée AfterSave au bout de 2 secondes.

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

Cette méthode permet de faire circuler la boucle tant que le processus d'enregistrement du document n'est pas terminé. Vous pouvez donc implémenter votre code après la boucle while.