本帖最后由 hwc2ycy 于 2013-12-5 08:40 编辑
Workbook.SheetFollowHyperlink 事件 单击 Microsoft Excel 中的任何超链接时发生此事件。 语法:SheetFollowHyperlink(Sh, Target) Sh,这个就不需要介绍了,不记得的往上翻一篇。 Target,HyperLink对象,具体的属性值,翻翻F1,一边看一边折腾。 示例: Private SubWorkbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Debug.Print Sh.Name & ":" & Target.Address End Sub ‘在 立即 窗口输出工作表名,超链接的地址
Workbook.SheetSelectionChange 事件 任一工作表上的选定区域发生更改时,将发生此事件(但图表工作表上的选定区域发生改变时,不会发生此事件)。 语法:SheetSelectionChange(Sh, Target) Sh,新选定区域所在的工作表(图表工作表不会触发此事件) Target,新选定的单元格区域,如果是选则多个不相连的单元格区域,在处理多个单元格区域引用时注意操作。 示例: Private SubWorkbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range) Application.StatusBar = "在 工作表 " &Sh.Name & " 选中了单元格区域:" & Target.Address End Sub ‘在状态栏显示当前选中的单元格区域地址。
关于Workbook对象的介绍基本就告一段落,下面补充几个知识点: 1.事件触发的联动、顺序,先看看示例代码: Option Explicit
Dim strMsg As String
Private Sub Workbook_NewSheet(ByVal Sh AsObject) strMsg = "工作簿对象的NewSheet事件触发,新建的工作表 " & Sh.Name MsgBox strMsg End Sub
Private Sub Workbook_SheetActivate(ByVal ShAs Object) strMsg = "工作簿对象的SheetActivate事件触发,激活的工作表 " & Sh.Name MsgBox strMsg End Sub
Private SubWorkbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range,Cancel As Boolean) strMsg = "工作簿对象的SheetBeforeRightClick事件触发" & vbNewLine strMsg = strMsg & "右键操作所在的工作表 "& Sh.Name & vbNewLine strMsg = strMsg & "右键操作所在的单元格区域 "& Target.Address MsgBox strMsg End Sub
Private Sub Workbook_SheetDeactivate(ByValSh As Object)
strMsg = "工作簿对象的SheetDeactivate事件触发,停用的工作表" & Sh.Name MsgBox strMsg End Sub
Private SubWorkbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) strMsg = "工作簿对象的SheetSelectionChange事件触发" & vbNewLine strMsg = strMsg & "发生事件所在的工作表 "& Sh.Name & vbNewLine strMsg = strMsg & "新选中的单元格区域为 " & Target.Address MsgBox strMsg End Sub
Private Sub Workbook_WindowActivate(ByValWn As Window) strMsg = "工作簿对象的Windowactivate事件触发" & vbNewLine strMsg = strMsg & "被激活的窗口 " &Wn.Caption MsgBox strMsg End Sub
Private Sub Workbook_WindowDeactivate(ByValWn As Window) strMsg = "工作簿对象的WindowDeactivate事件触发" & vbNewLine strMsg = strMsg & "被停用的窗口 " &Wn.Caption MsgBox strMsg End Sub
当在工作簿中插入一个工作表时,按先后顺序会触发这些事件 NewSheet--SheetDeActivate—SheetActivate 上述事件激活的流程如下:
插入工作表时,先会触发NewSheet事件。
新建的工作表由于会自动激活成为当前活动工作表。
那么之前的活动工作表就会停用,触发SheetDeActivate事件。
接着,新建的工作表激活,SheetActivate触发。
当在工作簿中删除一个工作表时,按先后顺序会触发这些事件 SheetDeActivate—SheetActivate
如果有应用程序级事件,工作簿事件,工作表事件,那顺序又要另当别论了。
在应用事件的时候,根据实际需求,量体裁衣。
2.如何启用与禁用事件 Excel提供的对象中有事件的对象不多,用得比较多的一般就是工作簿,工作表与Application对象自身。
事件通常提到的三个级别也就是应用程序级(加载宏),工作簿级(工作簿事件)与工作表级(工作表事件)。 通过设置Application的EnableEvents属性可以打开与关闭事件(该属性对于窗体的事件无效,自定义类的事件有待验证)。 EnableEvents属性是Boolean类型,为True时响应事件,为False时禁用事件。 当在一个过程中关闭事件响应时,在代码退出前记得再打开该属性。 如果碰到有事件代码不执行的情况,可在立即窗口中输入? Application.EnableEvents 根据显示的结果进行排错。
另外,在位于Excel中的 开发工具 选项卡 控件 组中的 设计模式 也可以实现事件的启用与禁用(该按钮是切换按钮)。
调试事件代码时,如果不知何时会触发,可通过以上的范例代码,以显示消息框的形式进行调试,观察参数的值,配合STOP或断点,都是很好的手段。
工作簿对象的事件对于XML,数据透视表也提供了支持,在实际处理中如果有需要用到相关事件的话可以好好折腾。
生命在于运动,代码在于折腾。
|