|
楼主 |
发表于 2009-2-25 15:25
|
显示全部楼层
第3部分 Wordbook(工作簿)对象
技巧49 打印预览时不触发事件
在工作表打印之前或进行打印预览时,会触发工作簿的BeforePrint事件。在某些情况下希望在打印预览时能禁止触发该事件,例如如图所示的工作表中,用户在打印时使用下面的代码将流水号的数值自动加1。- #001 Private Sub Workbook_BeforePrint(Cancel As Boolean)
- #002 Sheet1.Range("J1") = Sheet1.Range("J1") + 1
- #003 End Sub
复制代码
但是在打印预览时并不希望流水号的数值自动加1,此时,需要修改系统的打印预览功能,如下面的代码所示。- #001 Private Sub Workbook_Open()
- #002 Dim CmdCtrls As CommandBarControls
- #003 Dim Cmd As CommandBarControl
- #004 Set CmdCtrls = Application.CommandBars.FindControls(ID:=109)
- #005 For Each Cmd In CmdCtrls
- #006 Cmd.OnAction = "ThisWorkbook.MyPrint"
- #007 Next
- #008 End Sub
复制代码 代码解析:
工作簿的Open事件过程,在打开工作簿时,修改系统中所有打印预览命令按钮和菜单项的动作,指定其OnAction属性为ThisWorkbook代码窗口中的公用过程MyPrint。
第4行代码使用FindControls方法将所有打印预览命令按钮和菜单项赋给变量CmdCtrls,FindControls方法返回符合指定条件的CommandBarControls集合,语法如下:
expression.FindControls(Type, Id, Tag, Visible)
其中参数expression是必需的,该表达式返回一个CommandBars集合。
参数Id是可选的,要查找控件的标识符。打印预览命令控件的标识符为109。
第5行到第7行代码遍历所有打印预览命令控件,指定其OnAction属性为ThisWorkbook代码窗口中的公用过程MyPrint。OnAction属性返回或设置一个Visual Basic 的过程名,该过程在用户单击或更改某命令栏控件的值时运行。
MyPrint过程代码如下:- #001 Public Sub MyPrint()
- #002 With Application
- #003 .EnableEvents = False
- #004 .ActiveSheet.PrintPreview EnableChanges:=False
- #005 .EnableEvents = True
- #006 End With
- #007 End Sub
复制代码 代码解析:
MyPrint过程通过禁止对象事件,使工作表打印预览时不触发工作簿的BeforePrint事件。
第3行代码将Application对象的EnableEvents属性设置为False,禁用事件,使事件不能触发。
第4行代码使用PrintPreview方法对工作表执行打印预览。PrintPreview方法以打印效果显示指定的对象,该方法只有一个参数EnableChanges,用来指定是否可以修改页面设置,当其值为False时,禁止在打印预览时修改页面设置,默认值为True。
第5行代码将Application对象的EnableEvents属性设置为True,启用事件。
为了在工作簿时恢复默认的打印预览设置,在ThisWorkbook代码窗口写入以下代码:- #001 Private Sub Workbook_BeforeClose(Cancel As Boolean)
- #002 Dim CmdCtrls As CommandBarControls
- #003 Dim Cmd As CommandBarControl
- #004 Set CmdCtrls = Application.CommandBars.FindControls(ID:=109)
- #005 For Each Cmd In CmdCtrls
- #006 Cmd.OnAction = ""
- #007 Next
- #008 End Sub
复制代码 代码解析:
工作簿的BeforeClose事件过程,关闭工作簿时将所有打印预览命令按钮和菜单项的OnAction属性恢复为默认的动作。
经过以上设置,工作表只有在进行打印时“流水号”数值才自动加1。
[ 本帖最后由 yuanzhuping 于 2009-2-25 17:27 编辑 ] |
评分
-
1
查看全部评分
-
|