事件"/>
第5章 Excel事件
1 让Excel自动响应你的行为
1.1、 让Excel自动问好
Private Sub Workbook_Open()MsgBox "你好, 主人"
End Sub
保存退出,重新打开就能看到效果
1.2、事件、VBA里的自动开关
Workbook_Open() (Workbook事件作用的对象为工作簿,Open对象的事件是打开)
1.3、事件过程
触发动作所执行的过程称为事件过程
1.4、编写事件过程
格式:对象名称_事件名称
2、Worksheet事件
2.1、关于Worksheet事件
写在工作表的事件
2.2、常用的Worksheet事件
Worksheet_Change事件:自动提示更改的内容
语法:
Private Sub Worksheet_Change(ByVal Target As Range)
代码块
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)MsgBox Target.Address & "单元格的值被改为:" & Target.Value
End Sub
Worksheet_SelectionChange事件:你选中了谁
Private Sub Worksheet_SelectionChange(ByVal Target As Range)MsgBox Target.Address & "单元格选中:" & Target.Value
End Sub
Worksheet_Activate事件:自动提示工作表名
Private Sub Worksheet_Activate()MsgBox "当前活动工作表为:" & ActiveSheet.Name
End Sub
Worksheet_Deactivate事件:禁止选中其他工作表
Private Sub Worksheet_Deactivate()MsgBox "不允选中成绩表以外的其他工作表!"Worksheets("成绩表").Select
End Sub
2.3、Worksheet事件列表
3、Workbook事件
3.1、关于Workbook事件
3.2、常用的Workbook事件
Open事件
Workbook_Open事件告诉Excel,当打开工作簿自动运行程序
BeforeClose 事件
Workbook_BeforeClose事件告诉Excel,在关闭工作簿之前自动运行程序
Private Sub Workbook_BeforeClose(Cancel As Boolean)If MsgBox("你确定要关闭工作簿吗?", vbYesNo) = vbNo ThenCancel = True '取消End If
End Sub
Workbook_SheetChange事件
Workbook_SheetChange事件告诉Excel,当工作簿里任意一个单元格被更改时,自动运行程序
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)MsgBox "当前更改的工作表为:" & Sh.Name & Chr(13) & _"发生更改的单元格地址为:" & Target.Address
End Sub
4、别样的自动化
4.1、不是事件的事件
Application 对象的OnKey方法
按下某个键触发事件
Option ExplicitSub ok()Application.OnKey "+e", "test"
End SubSub test()MsgBox "按键事件"
End Sub
语法:Application.OnKey “+e” , "test" (+e表示按下Shift+e, 触发的方法为test)
Application对象的OnTime方法
定时任务
Sub oT()'一分钟之后,自动运行Test过程Application.OnTime Now() + TimeValue("00:01:00"), "ontest"
End SubPublic Sub ontest()MsgBox "定时任务"
End Sub
运行过程oT, 表示1分钟后运行
5、典型的技巧与示例
5.1、自动补全商品信息
Private Sub Worksheet_Change(ByVal Target As Range)'如果改变的单元格不是C列第3行以下的单元格或更改的单元格个数大于1时退出程序If Application.Intersect(Target, Range("C2:C65536")) Is Nothing Or Target.Count > 1 ThenExit SubEnd IfDim i As Integer '定义变量i = 2 '参照表中第一条记录在第2行,所有初始值2With Worksheets("参照表") 'Do While .Cells(i, "A").Value <> ""'判断录入的字母与参照表的字母是否相等If UCase(Target.Value) = .Cells(i, "A").Value ThenApplication.EnableEvents = False ' 禁用事件,防止将字母改为商品名时,两次执行程序Target.Value = .Cells(i, "A").Offset(0, 1).Value '写入产品名称Target.Offset(0, -1).Value = Date '写入日期Target.Offset(0, 1).Value = .Cells(i, "A").Offset(0, 2).Value '写入商品代码Target.Offset(0, 2).Value = .Cells(i, "A").Offset(0, 3).Value '写入商品单价Target.Offset(0, 3).Select '填写销售数量Application.EnableEvents = True '重启事件Exit SubEnd Ifi = i + 1LoopEnd With
End Sub
5.2、请找出所有特定数字(点击某个数字)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlNone '清除所有单元格原有底纹颜色'当选中的单元格个数大于1时,重新给Target赋值If Target.Count > 1 ThenSet Target = Target.Cells(1)End IfDim rng As Range '定义一个Range型变量'遍历单元格For Each rng In Cells(1, "A").CurrentRegionIf rng.Value = Target.Value Thenrng.Interior.ColorIndex = 39End IfNext
End Sub
5.3、让文件每隔一分钟自动保存一次
步骤一:
在任意一个模块写入代码
Sub otime()'一分钟后自动运行wbSave过程Application.OnTime Now() + TimeValue("00:01:00"), "wbSave"
End SubSub wbSave()ThisWorkbook.Save '保存本工作簿Call otime '再次运行otime过程
End Sub
步骤二:
Private Sub Workbook_Open()Call otime '在打开工作簿后自动运行otime过程
End Sub
更多推荐
第5章 Excel事件
发布评论