Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4408|回复: 6

[分享] 【烟花原创】VBA零基础之第40篇 Workbook对象(七)

[复制链接]
发表于 2013-12-4 08:53 | 显示全部楼层 |阅读模式
  Workbook.SheetActivate 事件
  当激活任何工作表时发生此事件。
  语法:SheetActivate(Sh )
  Sh 必选参数,Object类型,可以是ChartWorksheet对象。
  示例:
  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的,一般都可以取消某个操作了。
  像之前讲到的BefoeCloseBeforePrintBeforeSave事件,都有一个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"修改了AC列的单元格"
    End Sub
  '由于Workbook对象的SheetChange事件是监视整个工作簿内所有工作表的单元格的变更
  '如果只需要监视到某个特定的工作表,特定的单元格时,可用代码进行判断
  '当然,也可以直接用工作表对象的Change事件,这样只有特定工作表内的单元格变更时才发触发事件

评分

参与人数 1 +15 收起 理由
云影 + 15 很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-12-4 21:52 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-5 20:21 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-30 10:53 | 显示全部楼层
{:1112:}
回复

使用道具 举报

发表于 2014-6-18 11:15 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 23:02 | 显示全部楼层
关于Change事件何时触发何时不触发,下面几种情况有必要了解:
  设置单元格的格式不会触发,但是清除格式,粘贴格式,格式刷会触发。
  合并单元格,取消合并单元格不会触发事件
  针对单元格的批注操作是不会触发事件的,象新建,删除,修改批注。
  双击单元格(或F2)后进入编辑模式后,不输入任何内容回车,或直接跳转到其他单元格均会触发
  单元格内的公式自动重新计算(或者按F9手工重新计算)不会触发此事件
  直接删除一个空的单元格也会触发事件
  有的Excel命令操作单元格会触发,有的不会触发,象排序,合并不会触发,但清除格式会。
  用VBA代码操作单元格时,是否会触发参考以上几条。
谢谢分享,标记,四十
回复

使用道具 举报

发表于 2015-7-29 22:08 | 显示全部楼层
mark mark
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 07:36 , Processed in 0.121737 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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