Запустить макрос MS Word после сохранения события
В шаблоне MS Word 2007 есть нижний колонтитул с именем файла. Пользователь собирается открыть шаблон и сделать "Сохранить как...", чтобы сделать свой документ.
Я хочу, чтобы имя файла, отображаемое в нижнем колонтитуле, немедленно обновлялось до нового имени файла.
Есть AfterSaveEvent
или что-то, что я могу использовать в качестве ловушки для запуска моего VBA-скрипта, который выполняет обновление?
Или есть намного более простой способ?
3 ответа
Просто создайте макрос наподобие этого (я считаю, что он работает лучше, если включен в 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
Он будет срабатывать всякий раз, когда пользователь выбирает "Файл Сохранить как"
НТН!
Мы знаем, что Aftersave
событие недоступно для Microsoft Word. Но Word позволяет нам использовать BeforeSave
событие. Я реализовал это решение, и оно отлично работает.
Сначала мы должны реализовать Application.onTime
метод в Word BeforeSave
событие следующим образом
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
Этот метод вызовет метод с именем AfterSave
через 2 секунды.
Public Sub AfterSave()
While Word.ActiveDocument.Application.BackgroundSavingStatus <> 0
DoEvents
Wend
'Implement your code here
End Sub
В этом методе цикл while будет распространяться до тех пор, пока процесс сохранения документа не будет завершен. Таким образом, вы можете реализовать свой код после цикла while.
Это сработало на основании ответа @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