一:简介
一个动作触发事件自动执行事件对应的代码,在VBA中,工作簿、工作表、图表、窗体、控件都支持事件,事件范围:事件代码写在Sheet工作表中或者ThisWorkbook内(作用于所有工作表之上工作簿),不能写在模块中。
常用事件
- 选择事件:如选中单元格范围
- 单元格内容改变事件
- 工作簿关闭前事件
二:示例
' 定义全局变量
Dim num
Public Sub Workbook_BeforeClose(Cancle As Boolean)
ThisWorkbook.Save
End Sub
' 工作簿打开事件
Private Sub Workbook_Open()
End Sub
' 新增Sheet事件
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Name = Formate(Now(), "d号 hhmmss")
End Sub
' 工作簿打印前
Private Sub Workbook_BeforePrint(Cancel As Boolean)
' 临时关闭事件的触发(常用于解决死循环触发事件)
Application.EnableEvents = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' 事件源列号
Target.Column
Target.Count
Target.Value
Target.AddComment.Text "xxx"
' VBA中的三元运算符
IIf(Target = "", "清空", "--" & Char(10) & "===")
End Sub
' 选中区域
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
' 离开工作表
Private Sub Worksheet_Deactivate()
' Excel中最下面的状态条,可以在状态条上显示自定义的内容
Application.StatusBar = ""
End Sub
' 根据文本框中的内容模糊筛选(如根据姓名查询)
Private Sub TextBox1_Change()
Range("A1").AutoFilter 1, "*" & TextBox1.Text & "*"
End Sub
' 聚光灯效果:选中的行和列高亮
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
If Target.Count = 1 Then
Cells.Interior.Pattern = 1
Target.EntireColumn.Interior.Pattern = xlChecker
Target.EntireColumn.Interior.PatternColor = 4907
Target.EntireRow.Interior.ColorIndex = 3
Target.EntireRow.Interior.PatternColor = 4907
End If
End Sub
’定义应用程序级别时间,所有工作簿都可以使用
' 先将事件写入到ThisWorkbook,然后另存为.xlam, 开发工具-加载项进来。
Public WithEvents EX As Excel.Application
Private Sub EX_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Row = 1 Then Exit Sub
If Target.Count = 1 Then
Cells.Interior.Pattern = 1
Target.EntireColumn.Interior.Pattern = xlChecker
Target.EntireColumn.Interior.PatternColor = 4907
Target.EntireRow.Interior.ColorIndex = 3
Target.EntireRow.Interior.PatternColor = 4907
End If
End Sub
Private Sub Workbook_Open()
Set EX = Excel.Applicaiton
End Sub