工作表事件
- vba 事件的概念和 js 中的时间的概念是相似的,就是一定的操作会自动触发相应的代码逻辑
- 工作表时间就是针对 worksheet 的,对工作表进行一定的操作可以触发我们自己编写的逻辑代码,而不用手动运行
- 下面的图片中第一个下拉框一定要选中 worksheet ,这样我们就可以在后面的下拉框中选择相应的工作表事件,然后在自动生成的sub 中进行代码逻辑的编写
- 常用工作表事件总结
工作簿事件
- 工作簿事件基本也没啥可说的就是作用的对象不同而已
文件备份代码
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wb As Workbook
Set wb = ThisWorkbook
wb.SaveCopyAs wb.Path & "\" & Format(Now(), "yyyymmddhhmmss") & ".xlsm"
End Sub
程序事件
- 程序事件的话对所有的工作簿都是有效的
- 一个工作簿中程序事件的代码一般是放在工作簿对象下,而不是工作表
- 一个工作簿中编写相应的 excel 程序后,excel 打开的工作簿都会有相应的事件的响应
一、程序事件的编写
1、基本步骤
'这里的声明很重要
Public WithEvents app As Excel.Application
Private Sub app_NewWorkbook(ByVal Wb As Workbook)
MsgBox "正在新建工作簿"
End Sub
Private Sub app_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
MsgBox "你正在新建工作表" & Wb.Name & ":" & Sh.Name
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox " cant close"
' Cancel = True
End Sub
Private Sub Workbook_Open()
'这里的赋值也是很关键的一步,一般就是在这个工作簿事件中进行赋值的
Set app = Excel.Application
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox "正在切换工作表"
End Sub
- 然后就是在下拉框中选择我们定义的 app 进行程序事件代码编写
2、常见的程序事件
图片来自博文:https://www.cnblogs.com/lidapengwww/p/12580225.html
3、注意事项
- 事件引起的操作本身也可能再次引发事件,这样程序就会存于一个死循环,解决的方法就是在事件的响应代码最前面关闭事件(enableEvents= false),处理完成之后再开启事件
4、excel 中的表单控件和 AX 控件的区别
- 表单控件使用和功能更加简单直接插入控件指定相应的宏就能使用了
- AX 控件没有指定宏的选项,但是可以编写更强大的代码,支持事件的响应也更多
- AX 控件中的单选按钮如果要实现分组互斥的话就需要将一组的
groupname 属性设置为一样的,默认按sheet进行分组也就是一个工作表只有一个单选按钮能被选中
二、加载宏的使用
- 加载宏的意义是通用代码的重复使用,所以编写的时候尽量不要依赖具体的对象进行编写
1、保存加载宏
- 如果想单独打开一个未编写程序事件程序的工作簿,还想让它能够使用其他文件中编写的程序事件的话,就需要进行以下的操作
2、打开加载宏
3、添加快捷按钮
4、删除加载宏
- 删除之前先要去掉加载宏的勾选
- 去掉之后去保存加载宏的界面就可以看到以前保存的加载宏文件就可以删除了
|