none
WorkbookAfterSave Event RRS feed

  • Allgemeine Diskussion

  • WorkbookAfterSave Event (Excel 2007, 2003)

    Problemstellung

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

    Schwierigkeit

    Es gibt keine Schwierigkeit in Excel 2010 J  Dieses Event existiert schon bei Application Objekt. Für die früheren Versionen (Excel 2007 oder Excel 2003) gibt es aber nicht. Es gibt nur das Event WorkbookBeforeSave. Also …

    Wie schafft man das

    WorkbookBeforeSave Event

    1.   Soll man eine Excel.Application mit WithEvents deklarieren. Das funktioniert nur in Objekte wie Klassen oder DieseArbeitsmappe (ThisWorkbook) aber nicht in Modulen.

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

    VBA Code in DieseArbeitsmappe (ThisWorkbook):

     

    Dim WithEvents e As Excel.Application
    
    Private Sub e_NewWorkbook(ByVal Wb As Workbook)
    
    End Sub
    
    Private Sub e_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
        MsgBox "Bevor Speichern"
        'hier kann man die Arbeitsmappe aendern
        '...........
    End Sub
    
    Private Sub Workbook_Open()
        Set e = Application
    End Sub
    

     

    WorkbookAfterSave Event  (Excel 2007, 2003)

    3.   Fuer 2007, 2003 und frühere Versionen gibt dieses Events nichtK Man kann aber WorkbookAfterSave selber erzeugenJ  Dafür sollte man Application.OnTime Funktion verwenden. In WorkbookBeforeSave Event soll man durch eine Application.OnTime(Now,“WorkbookAfterSave“)  Funktion das WorkbookAfterSave 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, dass Excel drauf wartet, dass die Applikation zu ‚Idle‘ Zustand (‚Leerlauf ‘ Zustand) kommt und dann die Funktion von Application.OnTime ausgeführt wird. Das bedeutet ganz konkret, dass das Speichern erst komplett abgearbeitet wird und dann die WorkbookAfterSave Funktion aufgerufen wird.

    VBA Code in DieseArbeitsmappe (ThisWorkbook) wird:

    Dim WithEvents e As Excel.Application
    
    Private Sub e_NewWorkbook(ByVal Wb As Workbook)
    
    End Sub
    
    Private Sub e_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
        MsgBox "Bevor Speichern"
        'hier kann man die Arbeitsmappe aendern
        '...........
        Application.OnTime Now, "WorkbookAfterSave"
    End Sub
    
    Private Sub Workbook_Open()
        Set e = Application
    End Sub
    

     

     

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

    Sub WorkbookAfterSave()
        MsgBox "Nach Speichern"
        'hier kann man die Arbeitsmappe 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 09:32