none
DocumentAfterSave Event RRS feed

  • Allgemeine Diskussion

  • DocumentAfterSave Event

    Problemstellung

    Ich möchte bevor Speichern irgendeine Änderung in Dokument machen und nach Speichern diese Änderung zurücksetzen.

    Schwierigkeit

    Es gibt das Event DocumentBeforeSave bei Application Objekt, aber es gibt kein DocumentAfterSave Event. Auch nicht in 2010er Version. Also…

    Wie schafft man das

    DocumentBeforeSave Event

    1.   Es gibt schon. Soll man eine Word.Application Variable mit WithEvents deklarieren. Das funktioniert nur in Objekte wie Klassen oder ThisDocument aber nicht in Modulen.

    2.   Dann soll man diese Variable initialisieren. Die Events des [WithEvents Word.Application] Objektes werden erst aktiv, nachdem die Variable initialisiert wurde.

    VBA Code in ThisDocument:

    Dim WithEvents w As Word.Application
    
    Private Sub Document_Open()
        Set w = Application
    End Sub
    
    Private Sub w_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
        MsgBox "Bevor Speichern"
        'hier das Dokument aendern
        '.....
    End Sub
    

     

     

    DocumentAfterSave Event

    3.   Dieses Events gibt es nichtK Man kann aber DocumentAfterSave selber erzeugenJ  Dafür sollte man Application.OnTime Funktion verwenden. In DocumentBeforeSave Event soll man durch eine Application.OnTime(Now,“DocumentAfterSave“)  Funktion das DocumentAfterSave Event veranlassen. Der Trick ist hier, dass die OnTime Funktion eine so genannte ‘Idle‘ Funktion ist. Sie hat die niedrigste Priorität überhaupt. Das bedeutet das Word drauf wartet, dass die Applikation zu ‚Idle‘ Zustand (‚Leerlauf ‘ Zustand) kommt und dann wird die Funktion aus Application.OnTime ausgeführt. Das bedeutet ganz konkret, dass das Speichern erst komplett abgearbeitet wird und dann wird die DocumentAfterSave Funktion aufgerufen.

    VBA Code in ThisDocument wird:

    Dim WithEvents w As Word.Application
    
    Private Sub Document_Open()
        Set w = Application
    End Sub
    
    Private Sub w_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
        MsgBox "Bevor Speichern"
        'hier das Dokument aendern
        '.....
        Application.OnTime Now, "DocumentAfterSave"
    End Sub
    

     

     

    Ein neues Modul einfügen. VBA Code in Module1:

     

    Sub DocumentAfterSave()
        MsgBox "Nach Speichern"
        'hier das Dokument zurueck aendern
        '.....
    End Sub
    

                   


    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Mittwoch, 9. November 2011 10:09