分享

学习VBA,报表做到飞 第五章 事件篇 5.5 Workbook_BeforePrint事件

 拾叁亿人 2023-04-05 发布于云南

第五章 事件篇

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属性设置来防止代码出现死循环的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多