大家好,上节介绍工作表事件,本节将介绍工作簿事件,工作簿数量较多,但并没有工作表事件常用,只简单介绍几个常用的工作簿事件。
一、工作簿事件基础
当发生工作簿更改,工作簿中的任何工作表更改,加载宏更改或数据透视表更改时,都可能引发对应的工作簿事件,合理地使用各个事件可以避免一些意料不到的错误,提高代码的可读性和执行效率。
介绍事件类型时曾介绍过,编写工作簿事件过程代码,需要在“工程资源管理器窗口”双击thisworkbook对象,打开“代码编辑器后”,左上角选择workbook对象,右上角选择对应的“事件”。
二、工作簿事件分类
工作簿事件的种类很多,但很大一部分事件很难用到,下面图表列出工作簿事件和触发条件。可以收藏备查,根据需要来使用。
工作簿的事件种类较多,但很多事件用到的频率非常少,下面介绍演示几个常用的工作簿事件。其他的事件如果用以后网上查询适用场景即可。
三、常见工作簿事件
1、open事件
打开工作簿时,将触发此事件,此事件中可以写入一些只需执行一次得代码。(不过对系统设置进行修改的代码不应写在open事件中,而建议写在activate事件中,在执行顺序中activate事件在open事件之后发生,而且open时候是有可能不被执行的。比如打开工作簿时,如果用户始终按住shift键,是可以跳过open事件的。)
事件代码较简单,举个简单示例,比如打开工作簿时,选中固定的工作表。
在工程资源管理窗口中双击thisworkbook模块,在代码窗口中选择workbook对象以及open事件。自动生成open事件的结构代码后,在过程中编写代码简单如下:
MsgBox "请在汇总表输入汇总数据"
Worksheets("汇总表").Select
最后打开该文件的时候,工作簿open事件被触发。会弹窗然后选中“汇总表”。
2、activate事件
activate事件是在激活一个工作簿时触发的事件,那么工作簿激活包括两种情况,一、工作簿打开时,在open事件之后发生该操作。二、从另一个工作簿切换到本工作簿时,也会触发该事件。
(需要注意open事件和activate事件的区别。由于open事件可能被用户跳过,所以系统设置之类的初始化代码建议方在工作簿activate事件中。)举简单示例:
当该工作簿被激活时,就可以触发事件的代码。
3、deactivate事件
deactivate事件activate事件正相反,是当工作簿从活动状态转为非活动状态时触发的事件。包括以下两种情况:一、工作簿从活动状态转为非活动状态。二、关闭工作簿时,在workbook的beforeclose事件之后触发。
一些恢复系统设置之类的代码通常会放在deactivate事件中。比如activate事件中的所作的设置进行清理,恢复excel的初始设置等。这里就不举例说明了。
4、sheetchange事件
sheetchange事件,是当工作簿中任意一个单元格被更改时,自动运行程序。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "当前更改的工作表为" & Sh.Name & vbCrLf & _
"当前更改的单元格为" & Target.Address
End Sub
首先sheetchange事件的结构代码中, ByVal Target As Range之前的事件介绍过。ByVal表示”按值传递“的意思,Target是参数名称,as Range是表示Target参数是单元格对象类型。
那么ByVal Sh As Object中 Sh是参数的名称,As Object表示参数是对象变量。(可以复习VBA变量类型)
当工作表中的单元格的方法改变的时候。工作表的传递给Sh参数,单元格传递给Target参数。msgbox弹窗Sh.name获得工作表的名称,target.address获得单元格的地址。(代码中vbcrlf表示换行符加上回车符的意思)
今天下雨
本节主要介绍了工作簿事件,大概了解使用场景,注意事件的参数的使用,实际需要的时候现查即可。祝大家学习快乐。