Es gibt im Excel-Application-Object ein WorkbookBeforePrint-Ereignis. Dieses wird ausgelöst, wenn man in die Vorschau-Ansicht, direkt in den Druck oder aber in den Druckdialog geht. Die Vorschau und den Druckdialog kann man aber auch mit "Abbrechen" verlassen, und somit weiss man im Nachhinein nicht, ob gedruckt wurde oder nicht und wann. Ein WorkbookAfterPrint-Ereignis, was bei einem echten Druck ausgelöst wird, wäre also wesentlich besser. Dazu die beiliegende Klasse clsExcelAfterPrint, s.u. Starten. Die Klasse braucht noch ein Form-Objekt mit einem Timer-Control und ein instanziertes Excel. Beide werden der Klasse zugewiesen. PrintWatch.Start startet die Excel-Überwachung und liefert das Ereignis. Nach PrintWatch.StopIt wird auch das Ereignis nicht mehr geliefert. Beipiel: Dim WithEvents PrintWatch As clsExcelAfterPrint ... ... ... Set objExcel = CreateObject("Excel.Application", "") ... Set PrintWatch = New clsExcelAfterPrint Set PrintWatch.objApp = objExcel Set PrintWatch.objTimer = formMain.TimerPrintWatch ... ... ... PrintWatch.Start ' In diesem Zeitraum wird das Ereignis geliefert PrintWatch.StopIt ' Ab hier dann nicht mehr Private Sub PrintWatch_WorkbookAfterPrint() PrintWatch.StopIt ' Mache dies und das, und weiter PrintWatch.Start End Sub Das Klassenmodul clsExcelAfterPrint ' ----------------------------------------- ' clsExcelAfterPrint ' ----------------------------------------- Dim LastPrintDate As Date Dim BeforePrintDate As Date Dim ModeStart As Boolean Public WithEvents objApp As excel.Application Public WithEvents objTimer As Timer Public Event WorkbookAfterPrint() Public Sub Start() ' Timer aus, Interval 3 Sekunden ModeStart = True objTimer.Enabled = False objTimer.Interval = 3000 BeforePrintDate = CDate("01.01.1900") End Sub Public Sub StopIt() ModeStart = False End Sub Private Sub objApp_NewWorkbook(ByVal Wb As excel.Workbook) BeforePrintDate = CDate("01.01.1900") End Sub Private Sub objApp_WorkbookBeforePrint( _ ByVal Wb As excel.Workbook, Cancel As Boolean) If ModeStart = True Then ' Eine Sekunde abziehen falls der Druck unter eine Sekunde dauert BeforePrintDate = DateAdd("s", -1, Now) objTimer.Enabled = True End If End Sub Private Function GetLastPrintDate() As Date On Error GoTo Fehler ' Letztes Druckdatum merken With objApp.ActiveWorkbook ' Index 10 GetLastPrintDate = .BuiltinDocumentProperties("Last print date") End With Exit Function Fehler: ' Wenn Fehler, dann war Druckdatum leer. ' Dann auf Vergangenheit setzen. GetLastPrintDate = Now - 1 End Function Private Sub objApp_WorkbookOpen(ByVal Wb As excel.Workbook) BeforePrintDate = CDate("01.01.1900") End Sub Private Sub objTimer_Timer() If Not (BeforePrintDate = CDate("01.01.1900")) Then If GetLastPrintDate > BeforePrintDate Then ' Timer aus, Datum Init und Event abschicken objTimer.Enabled = False BeforePrintDate = CDate("01.01.1900") RaiseEvent WorkbookAfterPrint End If End If End Sub Dieser Tipp wurde bereits 15.537 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |