2010-09-03 34 views
6

Mój szablon MS Word 2007 ma stopkę z nazwą pliku w nim. Użytkownik otworzy szablon i wykona "Zapisz jako ...", aby zrobić swój dokument.Wyzwalanie makro MS Word po zapisaniu zdarzenia

Chcę, aby nazwa pliku widoczna w stopce była natychmiast aktualizowana do nowej nazwy pliku.

Czy istnieje AfterSaveEvent lub coś, co mogę użyć jako haka, aby uruchomić mój skrypt VBA, który aktualizuje?

Czy jest o wiele łatwiejszy sposób?

Odpowiedz

4

Wystarczy utworzyć makro tak (wierzę, że działa lepiej, jeśli zawarte w 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 

To będzie wyzwalany gdy użytkownik wybierze opcję „Zapisz plik jako”

HTH!

+0

Dzięki za odpowiedź. Mój facet z IT przeprowadzający testy na nim ... uzna to za zaakceptowane, jeśli zadziała. – blokeley

+0

@blokeley Proszę wstawić komentarz z wynikiem. Powodzenia! –

+0

świetnie, działało po raz pierwszy. Opublikuję pełne rozwiązanie poniżej dla innych. – blokeley

1

To działało na podstawie odpowiedzi @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! Dziękujemy za przesłanie wiadomości –

0

Wiemy, że zdarzenie Aftersave nie jest dostępna dla programu Microsoft Word. Ale program Word pozwala nam używać zdarzenia BeforeSave. Zaimplementowałem to rozwiązanie i działa dobrze.

Najpierw musimy wdrożyć Application.onTime metody w programie Word BeforeSave przypadku następująco

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 

Metoda ta będzie wywoływać metodę zwaną AfterSave po 2 sekundach.

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

W tej metodzie pętla while będzie krążyć, dopóki proces zapisywania dokumentu nie zostanie zakończony. Możesz więc zaimplementować kod po pętli while.

Powiązane problemy