ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 冬日暖暖

禁用事件操作过程中出现的状况

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-18 17:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hehex 发表于 2012-10-18 11:15
哈哈,刚在另外一个帖子里和一位朋友讨论这个语句呢。
叶枫老师已经在这里给出详细的解释了。

你的意思是问题的症结是Worksheet_SelectionChange对吗?
我不是很明白SelectionChange的含义是什么。

是不是注释了代码②,使得整个Sub都处于禁止状态了?
所以在取消代码②的注释之后,其实不被执行的不只是指一条命令。而是整个Sub内所有命令?

另外,我还想问的是Application.EnableEvents = False,到底禁止的是什么呢?
我开始的理解是禁止了整个Sub,即Target.Offset(1, 0).Select这句代码应该不会被执行。
但是,很显然的是,我的理解是错误的。

期待你的回复,谢谢!

TA的精华主题

TA的得分主题

发表于 2012-10-18 20:35 | 显示全部楼层
本帖最后由 hehex 于 2012-10-18 20:38 编辑

Sub Worksheet_SelectionChange()
    .....
      .....
End Sub
还是以上面的例子来说明一下:WorkSheet_SelectionChange 事件,顾名思义是指单元格被选中这个事件发生时,excel 自动执行的Sub 过程。
当你打开excel 的时候系统默认是响应事件的,所以当你在例子工作表上试验时,是可以达到预期结果的。

而当你注释掉事件过程里的代码②,就是 Application.EnableEvents = True 之后,由于前面已经执行了Application.EnableEvents = False,现在你的excel
系统是在禁止事件响应的状态下的。因此当你选中某单元格的时候,这个事件不会被激活,或者说它不会响应你。

所以你的第一个问题你的想法是对的,是整个Sub内所有命令。

第二个问题:你的理解也是对的。Application.EnableEvents = False之后被禁用的是整个sub,是让target.offset(1,0).select 在执行时不会激活整个sub事件。因为.select 这个方法会激活该事件程序自身的。
为了能正确的选中单元格而不是乱掉,Application.EnableEvents = False 禁止了整个sub 被再次激活,但是已经被激活的部分要进行完。因此顺序进行了 Target.Offset(1,0) 这条语句,然后执行Application.EnableEvents = True
恢复事件的正常响应。
而Application.EnableEvents = True 被你注释掉了,这时候当程序执行到End Sub 之后 事件响应的状态是False。因此即使你取消掉Application.EnableEvents = True 前面的注释状态,但是事件还是不会被激活,也就是没有机会再执行Sub 里面的语句,因此无法改变事件响应状态。
不知道我这么说,对你理解这个程序是否有一定帮助。

TA的精华主题

TA的得分主题

发表于 2012-10-18 20:37 | 显示全部楼层
冬日暖暖 发表于 2012-10-18 17:38
你的意思是问题的症结是Worksheet_SelectionChange对吗?
我不是很明白SelectionChange的含义是什么。
...

最好的方法还是动手,这次注释掉Application.EnableEvents = False 和Application.EnableEvents = True
执行一次该表,就明白语句的作用了。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-10-19 09:49 | 显示全部楼层
hehex 发表于 2012-10-18 20:35
Sub Worksheet_SelectionChange()
    .....
      .....

我理解了,非常感谢。

TA的精华主题

TA的得分主题

发表于 2016-12-26 23:58 | 显示全部楼层
ggsmart 发表于 2012-10-17 16:38
问题一:两条代码同时存在的情况下,是否意味着两条代码都被执行?
答:从你的程序来看,是的,两条代码如 ...

写的很详细,分析的也很仔细,解惑了,非常感谢!

TA的精华主题

TA的得分主题

发表于 2017-6-6 17:35 | 显示全部楼层
解释得很详细,又长姿势了!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 12:03 , Processed in 0.033169 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表