
Так как в VBA нет события onSave
or afterSave
, у меня возникли проблемы с поиском способа сохранить документ и обновить местоположение документа (после его сохранения).
Таким образом, наиболее распространенный способ использования этого документа:
- создать новый документ из шаблона
- редактировать документ
- сохранить документ как (какое-то место в сети)
Мой босс запутался во всех своих документах и не может найти их снова.
Поэтому он хочет узнать, где хранятся эти документы.
Я добавил поле расположения документа в нижний колонтитул и добавил этот код в проект VBA.
Sub AutoOpen()
'
' AutoOpen Macro
'
'
Dim aStory As Range
Dim aField As Field
For Each aStory In ActiveDocument.StoryRanges
For Each aField In aStory.Fields
aField.Update
Next aField
Next aStory
' set document as unchanged (prevents save dialog popping up when closing)
' further edits will set this back to false and restore
' the save dialog on close
ActiveDocument.Saved = True
End Sub
Private Sub wdApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
ActiveWindow.ActivePane.View.Type = wdPrintView
Application.ScreenUpdating = True
Selection.WholeStory
ActiveDocument.Fields.Update
ActiveDocument.Save
End Sub
Все работает до точки activeDocument.Save, и она должна быть сохранена до этого по крайней мере один раз.
Что тоже довольно очевидно, потому что я предполагаю, что событие beforeSave происходит до того, как оно будет сохранено должным образом, и поэтому нет location-path... Что я могу сделать, чтобы сделать это правильно?
решение1
Это поле будет обновлено предварительным просмотром печати. Поэтому трюк, который я использую, — создание предварительного просмотра печати в макросе AutoOpen.
Sub AutoOpen()
Application.Run MacroName:="MathTypeCommands.UIWrappers.FilePrintPreview"
ActiveDocument.ClosePrintPreview
End Sub