Workbook.SheetActivate 事件 当激活任何工作表时发生此事件。 语法:SheetActivate(Sh ) Sh 必选参数,Object类型,可以是Chart或Worksheet对象。 示例: Private Sub Workbook_SheetActivate(ByVal ShAs Object) MsgBox Sh.Name End Sub ‘每次激活工作表时显示工作表的名称
Workbook.SheetBeforeDoubleClick 事件
当双击任何工作表时发生此事件,此事件先于默认的双击操作发生。 语法:SheetBeforeDoubleClick(Sh, Target, Cancel) Sh 必选参数,Object类型,代表工作表的Worksheet对象 Target 必选参数,Range类型,双击发生时最靠近鼠标指针的单元格 Cancel 必选参数,Boolean类型,事件发生时为False,如果在事件过程中将此参数设为True,则在事件过程结束后,不执行默认的双击操作(不进入编辑模式) 这里大家可以留意下,凡是事件过程有参数变量为Cancel的,一般都可以取消某个操作了。 像之前讲到的BefoeClose,BeforePrint,BeforeSave事件,都有一个Cancel参数。 注意:图表工作表不发生此事件。 这里的双击操作还是有诸多限制的,只能是双击单元格区域才有效果,在单元格的边框或四个角上双击不是会触发事件的。比如选中某个单元格后,鼠标指针指向选所单元格的四个角时,指针是显示细线条的黑十字光标,此时双击是不会触发SheetBeforeDoubleClick事件;指向所选单元格的四周边框时,指针是十字箭头光标,此时双击同样也不会触发。 另外,默认的双击操作一般是进入到单元格的编辑模式。 示例: Private SubWorkbook_SheetBeforeDoubleClick(ByVal Sh As Object, _ ByVal Target As Range, ByVal Cancel As Boolean) Cancel = True End Sub ‘禁用默认的双击操作,这样就不能通过双击来修改单元格内的公式了。 ‘当然,你选中单元格后按F2键还是可以修改的。
Workbook.SheetBeforeRightClick 事件
右键单击任一工作表时发生此事件,此事件先于默认的右键单击操作。 语法:SheetBeforeRightClick(Sh, Target, Cancel) 三个参数的意义可参考上面的SheetBeforeDoubleClick事件过程。 同样,在图表工作表中也不会发生此事件。 示例: Private SubWorkbook_SheetBeforeRightClick(ByVal Sh As Object, _ ByVal Target As Range, ByVal Cancel As Boolean) Cancel = True End Sub ‘禁用默认的右键单击操作(不会显示右键菜单)。
Workbook.SheetCalculate 事件
在重新计算工作表时或在图表上绘制更改的数据之后发生此事件。 直接按F9重新计算即可手工触发此事件。 示例: Private Sub Workbook_SheetCalculate(ByValSh As Object) With Worksheets(1) .Range("a1:a100").Sort Key1:=.Range("a1") End With End Sub ‘在计算工作簿中的任何工作表时,对第一张工作表的 A1:A100 区域进行排序。
Workbook.SheetChange 事件
当用户或外部链接更改了任何工作表中的单元格时发生此事件。 语法:SheetChange(Sh, Target) Sh,必选参数,Object类型,Worksheet对象,也就是被更改的单元格所在的工作表。 Target,必选参数,Range类型,代表被更改的单元格区域 同样的,图表工作表是不会发生此事件的。
关于Change事件何时触发何时不触发,下面几种情况有必要了解: 设置单元格的格式不会触发,但是清除格式,粘贴格式,格式刷会触发。 合并单元格,取消合并单元格不会触发事件 针对单元格的批注操作是不会触发事件的,象新建,删除,修改批注。 双击单元格(或F2)后进入编辑模式后,不输入任何内容回车,或直接跳转到其他单元格均会触发 单元格内的公式自动重新计算(或者按F9手工重新计算)不会触发此事件 直接删除一个空的单元格也会触发事件 有的Excel命令操作单元格会触发,有的不会触发,象排序,合并不会触发,但清除格式会。
用VBA代码操作单元格时,是否会触发参考以上几条。 示例: Private Sub Workbook_SheetChange(ByVal ShAs Object, ByVal Target As Range) Dim strMsg$ strMsg = "工作表:" & Sh.Name & vbCrLf strMsg = strMsg & "单元格区域:" &Target.Address MsgBox strMsg End Sub
Private Sub Workbook_SheetChange(ByVal ShAs Object, ByVal Target As Range) If Sh.Name <> "Sheet2" Then Exit Sub If Application.Intersect(Columns("a:c"), Target) Is NothingThen Exit Sub MsgBox"修改了A到C列的单元格" End Sub '由于Workbook对象的SheetChange事件是监视整个工作簿内所有工作表的单元格的变更
'如果只需要监视到某个特定的工作表,特定的单元格时,可用代码进行判断
'当然,也可以直接用工作表对象的Change事件,这样只有特定工作表内的单元格变更时才发触发事件
|