第五章 事件篇 5.5 Workbook_BeforePrint事件 这是一个工作簿事件,当代码所在的工作簿准备打印时,触发该事件。 对于一些相对机密的文件,我们不想让别人打印出来,就可以设置一个打印密码。打印前触发该事件,只有输入正确的密码后才可以正常打印文件。如果输入密码不正确,无法打印文件。 Private Sub Workbook_BeforePrint(Cancel As Boolean) mm = InputBox('请输入密码') If mm = 123 Then Cancel = False Else Cancel = True MsgBox '密码错误,禁止打印!' End If End Sub 与Workbook_BeforeClose事件一样,该事件里也有一个布尔型参数Cancel,当这个参数被设置为Flase时,文档会被打印;当它被设置为True时,文档不会被打印。我们可以这样理解:被设置为Flase时,不(Flase)取消(Cancel)打印,被设置为True时,真(True)取消(Cancel)打印。双重否定就是肯定嘛! 上面这个案例,我们每一次打印之前都要输入密码。但我们想着在第一次打印前能够输入正确的密码,那么在随后的工作中我们想再打印这个文件时就不用再输入密码了。这时我们会用到事件的EnableEvents属性。 事件的启用与禁用通过Application对象的EnableEvents属性来控制: Application.EnableEvents = True 事件被启用 Application.EnableEvents = False 事件被禁用 上面这个案例,我们在输入正确的密码后,将事件禁用,那么以后再打印文件时就不会触发Workbook_BeforePrint事件,我们也就不用一遍遍的输入密码了,直到关闭该工作簿再打开时事件才会被重新启用。小程序可以这样修改一下: Private Sub Workbook_BeforePrint(Cancel As Boolean) mm = InputBox('请输入密码') If mm = 123 Then Cancel = False Application.EnableEvents = False Else Cancel = True MsgBox '密码错误,禁止打印!' End If End Sub 需要注意的是,如果把事件的EnableEvents属性设置为False,被禁用的不是代码当前所在的事件,而是工作簿的所有事件。如果我们还设置了比如Workbook_BeforeClose事件等,那么在工作簿关闭时这个事件也不会被触发了。所以在日常工作中,我们通常都是把EnableEvents属性设置为False来临时关闭事件,在代码末尾再把它设置为True来启用事件。 把EnableEvents属性设置为False来临时关闭事件,另一个重要的作用是防止代码出现死循环。下一节我们将用一个工作表事件来讲述如何通过EnableEvents属性设置来防止代码出现死循环的。 |
|