none
WorkbookAfterPrint Event RRS feed

  • Allgemeine Diskussion

  • WorkbookAfterPrint Event

    Problemstellung

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

    Schwierigkeit

    Es gibt das Event WorkbookBeforePrint bei Application Objekt, aber es gibt kein WorkbookAfterPrint Event.

    Wie schafft man das

    WorkbookBeforePrint 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 Workbook_Open()
        Set e = Application
    End Sub
    
    Private Sub e_WorkbookBeforePrint(ByVal Wb As Workbook, Cancel As Boolean)
        MsgBox "Bevor Drucken"
        'hier kann man die Arbeitsmappe aendern
        '...........
    End Sub
    

     

     

    WorkbookAfterPrint Event

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

    VBA Code in DieseArbeitsmappe (ThisWorkbook) wird:

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

     

     

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

     

    Sub WorkbookAfterPrint()
        MsgBox "Nach Drucken"
        '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:02