ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_2.6 当单元格内容或链接改变时触发事件

网友投稿 53 2023-11-07

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

2.6 当单元格内容或链接改变时触发事件

学习了 Worksheet.SelectionChange 触发事件,接下来学习Worksheet.Change 事件。

Worksheet.C hange 事件的触发要素为,当单元格被编辑时或者工作表上的链接数据刷新时 引起单元格内容改变时都能触发该事件,先来看看这个事件的过程外壳。

当用户更改工作表中的单元格或外部链接引起单元格内容的更改时发生此事件

Private Sub Worksheet_Change(ByVal Target As Range)

Statements(中间代码语句)

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_2.6 当单元格内容或链接改变时触发事件

End Sub

2.6.1 汇率价格填写

现将该事件运用到实际案例中来,要求:当在指定区域输入一个数值之后按照指定(内置) 汇率将转换后的价格写入单元格中,如图2-8所示。

示例过程如代码2-4所示。

代 码 2 - 4 在 F 列指定范围输入后自定计算汇率价格

001|Private Sub Worksheet_Change(ByVal Target As Range)

002| Dim MxRAs Integer

003| Const HuiLv As Single=35.314:Const MnR As Byte=16

004| With Target

0051

If.Count>1Or.Column~ 6 Then Exit Sub

0061

MxR=Cells(Rows.Count,1).End(xIUp).Row-5

007| If.RowMnR And.Column=6 And.Offset(0,-5)~""Then

008| If.Value>0 Then

009| Application.EnableEvents =FALSE

010| .Value =Format(.Value /HuiLv,"#,##0.00")

011| Application.EnableEvents =True

012| End If

013| End If

014 End With

015|End Sub

代码2-4示例过程执行情况下如下。

(1)声明了2个常数 HuiLv和MnR。HuiLv 常数为汇率比值, MnR 则是发货清单中的标 题行号。

(2)通过If.Count>1Or. Column~6 Then 语句判断选中的是否为一个单元格或选中的 不为 F 列,否则退出事件过程。

(3)接着通过Cells(Rows.Count,1).End(XIUp).Row -5语句获取清单中的有效行数并赋值 给 MxR 变量,语句中最末-5是因为在清单中 TOTAL 合计行后还有5行相关信息,该区域不 在触发区域范围内,所以将该区域放置到触发区域之外。

(4)通过If.RowMnRAnd.Column=6And.Offset(0,-5)~"" 判断修 改的单元格位置的行号是否处于 MxR 变量区间内,且列号为6 (F 列 ) , 并 判 断 选 中 单 元 格 向 左 偏 移 5 列 后 Packing No.单元格中的内容不为空时,执行写入汇率。

(5)If.Valu e>0 该语句用于判断当前被编辑单元格按Enter 键后输入的数字是否大于0,

若 大 于 0 则 执 行 Application.EnableEvents=False (关 闭 事 件 再 次 响 应 , 防 止 死 循 环) ;再 执行 .Value=Format(.Value/HuiLv,"#,##0.00")语句,将编辑后单元格内的数值除以HuiLv 常数, 并设置其结果数字格式并将结果写入被编辑单元格内,最后重新开启EnableEvents 属性的事件 响应功能。

无 言:Worksheet.Change 事件过程中Target参数指当前被编辑的单元格对象,而不是按 Enter键后选中的单元格。

例如,当前编辑的单元格是A1, 只要双击或者按F2 键进入单元格时,该单元格都会被传 递给Target参数。当编辑完成后按Enter键 ,A1的变化刚才已经触发了WorkSheet.Change 事件, 而非由其按 Enter 键后被选中单元格触发该事件。

? 皮蛋:嗯,明白了。还有Application.EnableEvents是干什么用的呢?

无言: Application.EnableEvents 属性是这个事件中的重点语句,没有它, WorkSheet. Change事件过程将触发无限循环WorkSheet.Change事件。

皮蛋:这么厉害!那它到底作用何在?

Application.EnableEvents属性隶属于 Application 对象,该属性的作用非常明确——用于指 定是否启用(响应)事件,其赋值只有2个: True或 False, 语法如下。

启用或关闭事件

Application.EnableEvents=True|False

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

上一篇:《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.6 Django 路由 URL
下一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_6.2 控件基本知识
相关文章

 发表评论

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

×