iamabhaykmr
iamabhaykmr

Reputation: 2011

How to detect if user tried to click on save/save as option or pressed ctrl-S in Microsoft word using VBA code?

I want to detect when user press ctrl-S or click on Save option of Microsoft word using VBA excel macro code.

I found related links about Save changes while closing and Detecting if a document is getting close but I not able to find some example code for detecting saving of word document.

Any help would greatly appreciated.

Thanks

Upvotes: 2

Views: 1222

Answers (1)

Vityata
Vityata

Reputation: 43593

Unfortunately (or fortunately) Word does not work like excel and there the keybinding follows different logic. Thus, in Word, you should try something like this, to bind Ctrl + S. The idea is that on openning of the file you tell the application to bind Ctrl + S to the SaveMe Sub.

Option Explicit

Private Sub Document_Open()

    With Application
        .CustomizationContext = ThisDocument
        .KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyS), KeyCategory:=wdKeyCategoryCommand, Command:="SaveMe"
    End With

End Sub

Public Sub SaveMe()

    MsgBox "User Saved"

End Sub

Put the code in ThisDocument:

enter image description here

Until now, it works this way only for Ctrl+S. If you go for the Save through the menu, it will not follow this logic. This is what you should do then:

For the general solution, follow these instructions:

I. Create a clsWord and put the following code inside:

Option Explicit

Public WithEvents appWord As Word.Application

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

    Call SaveMe

End Sub

II. Change the code in ThisDocument to this:

Option Explicit

Dim myWord As New clsWord

Private Sub Document_Open()

    With Application
        .CustomizationContext = ThisDocument
        .KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyS), _
            KeyCategory:=wdKeyCategoryCommand, Command:="SaveMe"
    End With

    Set myWord.appWord = Word.Application

End Sub

III. In a module:

Option Explicit

Public Sub SaveMe()

    MsgBox "User Saved"

End Sub

Parts of the ideas are taken from the MSDN here - https://msdn.microsoft.com/en-us/library/office/ff838299.aspx But the code there was not complete :)

Upvotes: 1

Related Questions