Вызов пользовательской формы при сохранении

Как мне вызвать пользовательскую форму в VBA, когда пользователь нажимает кнопку «Сохранить» в MS Word?


person Krimmel    schedule 28.07.2009    source источник


Ответы (2)


Для этого у вас есть два варианта: вы можете либо переопределить встроенные команды FileSave и FileSaveAs, либо создать обработчик событий для события DocumentBeforeSave приложения (что требует немного больше работы).

Переопределить встроенные команды можно, добавив следующий код в модуль VBA (соответствующим образом отрегулируйте тип отображаемой пользовательской формы):

' override File -> Save
Public Sub FileSave()

    CustomSave
    ' call ActiveDocument.Save to actually save the document

End Sub

' override File -> Save As...
Public Sub FileSaveAs()

    CustomSave
    ' call ActiveDocument.SaveAs to actually save the document

End Sub

Sub CustomSave()

    Dim frm As New frmCustomSave
    frm.Show

End Sub

Второй вариант можно реализовать, поместив следующий код в раздел Объекты Microsoft Word -> ThisDocument в редакторе VBA:

Option Explicit

Private WithEvents wdApp As Word.Application

Private Sub Document_New()
    Set wdApp = Word.Application
End Sub

Private Sub Document_Open()
    Set wdApp = Word.Application
End Sub

Private Sub wdApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)

    Dim frm As New frmCustomSave
    frm.Show

End Sub
person Dirk Vollmar    schedule 28.07.2009

Пример, который должен помочь, см. в разделе Перехват таких событий, как сохранение и печать.

person Galwegian    schedule 28.07.2009