一:简介

一个动作触发事件自动执行事件对应的代码,在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

VBA Event事件_vba事件

’定义应用程序级别时间,所有工作簿都可以使用
' 先将事件写入到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