ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_3.10 打印前触发事件

网友投稿 67 2023-11-07

摘要】 本书摘自《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》一书中第3章,第10节,陈锡卢、李应钦著。

3.10 打印前触发事件: Workbook.Before Print

无言:打印前有时会忘记填写某项内容,就哗哗啦啦地将一张张雪白的A4 纸或者几联纸 打印出来,皮蛋,遇到过这样的情况没?

皮蛋:呵呵,这个有过。前随便打,现在不行了,对于销售单据连号的,废了联就要 “挨板子”——扣款,所以我现在都检查了又检查,但看多了眼花花,容易漏错。

无言:那好,现在教你一个打印事件,而且是打印前执行的哦,这样能减少“挨板子”。

皮蛋:啥事件过程?

无言: Workbook.BeforePrin t 事件过程,先来看事件外壳和作用,后面再讲“挨板子” 问题。

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_3.10 打印前触发事件

在打印指定工作簿(或者其中的任何内容)之前,发生此事件

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Statements(中间代码语句)

End Sub

Workbook.BeforePrint事件过程只有1个Cancel参数,就像其他事件过程一样,该参数决 定了响应了事件后是否继续执行某个操作。在这里Cancel参数的作用是响应后是否执行打印 输出。

无言:现在来说说“挨板子”的问题,可以通过该事件来判断单元格中的数据是否完整, 减少“挨板子”。

代码3-22为打印前检测数据完整性的示例代码。

代码3- 22 打印前检测数据的完整性

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Dim Rng1 As Range,Rng2 As Range,Erl As Byte,Err2 As Byte

With Sheet1

Set Rngl =Application.Union(.Range("D3:D5"),.Range("H3:HS"),Range("D6"),.Range("F6"),

Range("D7"),.Range("H7"))

Set Rng2=.Cells(9,"B").Resize(.Cells(9,"B").End(xIDown).Row-9,8)

Err1=IIf(WorksheetFunction.CountA(Rng1)<10,1,0)

Em2=IIf(WorksheetFunction.CountA(Rng2)

If Err1+Err2=0 Then

Cancel =False

Else

Cancel =True

Select Case Err1 +Err2

Case 1

MsgBox Rngl.Address(0,0)&"区域的相关联系方式或单号等信息未填写完整,请

检查",vbExclamation+vbOKOnly

Case 2

MsgBox Rng2.Address(0,0)&"区域的相关产品清单信息不完整,请检查核对",

vbExclamation+vbOKOnly

Case 3

MsgBox Rngl.Address(0,0)&"区 域 " &vbCr&Rng2.Address(0,0)&" 区 域 " &vbCr_

&“相关信息均为填写完整,请检查核对”,vbExclamation+vbOKOnly

End Select

End If

End With

Sub

期等信息的区域; Rng2 变量则被赋值为订货单中的获取清单范围的区域,该区域为标题至合 计间的区域。

(2)运用lif 函数配合WorksheetFunction.CountA 工作表函数,统计Rng1 和 Rn2g 区域 中的单元格是否都具有内容:当Rng1 区域中内容小于10时,将Errl赋值为1,则赋值为0; Err2 是当区域中单元格的内容小于区域的单元格个数时,赋值为2,否则为0。

(3)判断Errl与 Err2的和,如果为0,则将Cancel赋值 False,响应事件后执行打印操作; 若两变量的和分别等于1、2、3,则通过Select Case 语句选择提供不同提示信息,并将Cancel 赋值True, 响应事件后不执行打印操作。

无言:通过上面的代码3-22事件过程,既可以节省纸张,还可以减少“挨板子”的可能 性。通过控制Workbook.BeforePrint事件的Cancel参数控制打印响应,是运用该事件的要点。

? 皮蛋:嗯嗯,检查功能有了,看来我还要去弄一个自动填表的功能了。

无言:自动填表功能,可以通过Worksheet.SelectionChange和Worksheet.Change 事件的结 合运用搞定。但是也需要有良好的制表习惯才能节省代码。

皮蛋:这个问题不大,反正我现在很少用多表头和合并单元格了。

(1)代码3-22示例过程,首先声明了2个区域Rng 变量以及2个Byet 类型的 Err变量, Rngl 变量被赋值为 Sheetl 区域中填写关于订货单中相关人员的姓名、联系方式及订货编号日

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《深入理解 Java 虚拟机 JVM 高级特性与最佳实践(第3版)》_求知之路漫漫_1.5 展望 Java 技术的未来
下一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_8.1.3 使用name属性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×