事件编程 (自动化)
✅ 常用 Worksheet 事件列表
- 示例
- 源码
' 计算增长率和增长值
Private Sub Worksheet_Change(ByVal Target As Range)
Dim one As Double
Dim two As Double
Dim val As Double
Dim percent As Double
' 判断当前选中单元格 与 C2~C100 是否有交集
If Not Intersect(Target, Range("C2:C100")) Is Nothing Then
two = Target.value
one = Target.Offset(0, -1).value
val = two - one
percent = val / two
Target.Offset(0, 1).value = val
Target.Offset(0, 2).value = percent
End If
End Sub
🔄 工作表激活/切换相关
事件名 | 描述 |
---|---|
Activate | 当工作表被激活时触发 |
Deactivate | 当工作表失去焦点(切换到其他表)时触发 |
SelectionChange(ByVal Target As Range) | 当用户更改选定的单元格或区域时触发 |
✍️ 单元格编辑/更改相关
事件名 | 描述 |
---|---|
Change(ByVal Target As Range) | 当单元格内容更改后触发(注意:仅限用户更改) |
BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) | 用户在单元格上双击时触发 |
BeforeRightClick(ByVal Target As Range, Cancel As Boolean) | 用户在单元格上右键点击时触发 |
Calculate | 当工作表中任意公式计算时触发 |
✅ 支持的数据验证、输入控制
事件名 | 描述 |
---|---|
FollowHyperlink(ByVal Target As Hyperlink) | 用户点击超链接时触发 |
🔒 支持保护与取消保护
事件名 | 描述 |
---|---|
PivotTableUpdate(ByVal Target As PivotTable) | 当工作表中的数据透视表被更新时触发 |
TableUpdate (无原生事件) | 表格更新需结合 Change 事件使用 |
📅 工作表级别的计算/刷新
事件名 | 描述 |
---|---|
Change + Intersect | 实现区域监听变更(需自定义判断区域) |
Calculate | 整个工作表计算完成时触发 |
✅ 常用 Workbook 事件列表
'a1单元格发生变化 需要修改 b1或完成其他操作
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' 避免死循环
If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
If Range("A1").value > 10 Then
Range("B1").value = 0
Else
Range("B1").value = 10
End If
End Sub
📂 一、打开/关闭相关事件
事件名 | 说明 |
---|---|
Open | 工作簿被打开时触发 |
BeforeClose(Cancel As Boolean) | 工作簿关闭前触发,可以取消关闭 |
Deactivate | 工作簿失去焦点时触发(例如切换到另一个工作簿) |
Activate | 工作簿获得焦点时触发 |
📝 二、保存相关事件
事件名 | 说明 |
---|---|
BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) | 保存前触发,可以取消保存或处理保存逻辑 |
AfterSave(ByVal Success As Boolean) | 保存后触发,可检查是否保存成功 |
📄 三、工作表相关事件( 工作簿中某工作表被操作)
事件名 | 说明 |
---|---|
SheetActivate(ByVal Sh As Object) | 任意工作表被激活时触发 |
SheetDeactivate(ByVal Sh As Object) | 任意工作表失去焦点时触发 |
SheetChange(ByVal Sh As Object, ByVal Target As Range) | 任意工作表的单元格值被更改时触发 |
SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) | 任意工作表的选择区域发生变化时触发 |
SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) | 任意工作表中某单元格双击时触发 |
SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) | 任意工作表中右键单击时触发 |
SheetCalculate(ByVal Sh As Object) | 任意工作表重新计算后触发 |
SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable) | 任意工作表中的数据透视表更新后触发 |
SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) | 任意工作表中的超链接被点击时触发 |
📚 四、窗口相关事件
事件名 | 说明 |
---|---|
WindowActivate(ByVal Wn As Window) | 工作簿中的窗口获得焦点时触发 |
WindowDeactivate(ByVal Wn As Window) | 工作簿中的窗口失去焦点时触发 |
WindowResize(ByVal Wn As Window) | 窗口尺寸发生变化时触发 |
🧩 五、其他事件
事件名 | 说明 |
---|---|
NewSheet(ByVal Sh As Object) | 新建工作表或图表时触发 |
ModelChange (仅适用于 PowerPivot) | 数据模型更改时触发(高级用户) |