Excel有Workbook_BeforePrint打印事件。而没有类似于AfterPrint的事件。当我们需要在打印前做一些事,然后在打印后再做一些事的时候,发现没有AfterPrint是一件很让人头痛的事。
事实是我们通过在BeforePrint事件中采用一些技巧,我们可以实现这样的功能。实现这样的技巧的思路是,在BeforePrint中先完成打印前的工作,然后实际打印(调用printout,这时,如果调试的话,会第二次进入BeforePrint事件,所以我们需要一个全局变量来标识第二次进入BeforePrint的时候,只是打印),接着完成打印完成的工作。最后设置Cancel参数为True,以取消本次打印。
代码如下:
- ' 定义全局变量是否是真实打印
- public isRealPrint as boolean
- ....
- ' 打印事件
- Private Sub Workbook_BeforePrint(Cancel As Boolean)
- if not isRealPrint then
- ' 将你打印前的处理代码放在这里
- isRealPrint = True
- ActiveSheet.PrintOut ' 真实的打印 会再一次进入BeforePrint事件。但由于isRealPrint全局变量已经设置为了True, 所以只是打印而已
- ' 将你打印后的处理代码处理放在这里
- Cancel = True ' 取本次打印
- isRealPrint = False
- end if
- End Sub
事件上实现这样的技巧还有另外一种方式,就是不使用全局变量,而是使用Application.EnableEvents这个开关。
ActiveSheet.PrintOut之前关闭EnableEvents开关。这样BeforePrint不会进入第二次,所以进行了实际的打印。然后再打开EnableEvents这个开关,以恢复原状。此时仍然要Cancel掉本次打印。
它们实现了同样的效果