Запуск макроса MS Word после сохранения события - PullRequest
6 голосов
/ 03 сентября 2010

В шаблоне MS Word 2007 есть нижний колонтитул с именем файла.Пользователь собирается открыть шаблон и выполнить «Сохранить как ...», чтобы создать свой документ.

Я хочу, чтобы имя файла, отображаемое в нижнем колонтитуле, немедленно обновилось до нового имени файла.

Есть ли AfterSaveEvent или что-то, что я могу использовать в качестве ловушки для запуска моего VBA-скрипта, который выполняет обновление?

Или есть более простой способ?

Ответы [ 3 ]

4 голосов
/ 04 сентября 2010

Просто создайте макрос, подобный этому (я считаю, что он работает лучше, если включен в 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

Он будет срабатывать всякий раз, когда пользователь выбирает «Файл Сохранить как»

НТН!

1 голос
/ 10 сентября 2010

Это сработало на основании ответа @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 голосов
/ 24 февраля 2018

Мы знаем, что событие 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.

...