扫荡吧三国修改器ios:Application.EnableEvents 补充

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 16:27:23
1、APPLICATION.ENABLEEVENTS=??还是不会用,先=FALSE后,后面的就不执行了,后=FALSE后第二次改变单元格值时,CHANGE事件就不起作用了——————false后,不是不执行代码,代码照样要执行,只是在用代码对某对象进行操作(比如修改)之后,不会在触发该对象的某个事件,也就是写在这个事件里的代码不会再执行。
还用上面那个加“公司”两个字的代码作举例:复制内容到剪贴板
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
   Target.Value = Target.Value & "公司"
End Sub
如我们在A1单元格输入“皮包”两个字,我们的目的是要在A1单元格输入“皮包公司”。但是在实际中,如果我们输入“皮包”,就是把单元格从空修改成“皮包”,就触发了Change事件,那么执行语句Target.Value = Target.Value & "公司"
,将target,即A1单元格的值改为A1单元格的原值“皮包”加上“公司”两个字变成“皮包公司”四个字。这种从两个字变为四个字的修改又触发了Change事件,又再一次执行Change事件里面的语句,将“皮包公司”改为“皮包公司公司”,这种改变又触发Change,又再一次执行语句.......总是这样,没个尽头。

但是如果我们把代码写成:复制内容到剪贴板
代码:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
    Target.Value = Target.Value & "公司"
  Application.EnableEvents = True
End Sub
这样,当我们在单元格里输入“皮包”时,触发了Change事件,运行中间的代码,首先运行的是Application.EnableEvents = False,修改了这个属性后,我们在下面将“皮包”改成“皮包公司”后就不会再触发Change事件了,这样程序就不会再执行第二遍。但是如果我们在最后不把它的属性改成True,以后我们修改单元格时也同样不会触发Change事件,也就不会再运行程序了,所以在最后得把它改回来。

2、是不是需要其他事件如SELECTIONCHANGE事件来做配合啊! ——————是的,很多时候都需要这两个事件配合起来用,比如上面说的加“公司”,还有单元格数据的累加时候都可能会需要到。还是加“公司”的例子,当你输入“皮包”后,回车,单元格会自动变为“皮包公司”,可当我们再一次双击该单元格,但并不对单元格进行值的修改时,也会变为“皮包公司公司”,而实际上我们并没有修改它的值。那么,我们就可以用这个事件配合Change事件判断单元格的值是否修改了。
代码可为:复制内容到剪贴板
代码:
Dim x '定义一个公共变量,让两个程序都可以用
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Value = x Then Exit Sub '如果修改的单元格的值等于变量x的值,退出程序
  Application.EnableEvents = False
    Target.Value = Target.Value & "公司"
  Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   x = Target.Value '将选中的单元格的值赋给变量x
End Sub