新浪博客

Excel-事件(Workbook、Worksheet、Range、OnKey/OnTime)

2022-08-26 10:50阅读:

Excel-事件(Workbook、Worksheet、Range、OnKey/OnTime)



一、Excel事件介绍
Excel事件就是一个能被对象识别的操作。
当某个事件发生后自动运行的过程称为事件过程。事件过程也是Sub过程。
实践过程必须写在特定对象所在的模块中,而且只有过程所在的模块里的对象才能触发这个事件。
事件过程名由Excel自动设置,以“对象名称_事件名称”的形式存在,不能更改。
二、Worksheet事件
Worksheet事件是发生在Worksheet对象里的事件。事件过程必须写在对应的Worksheet对象里,只有过程所在的Worksheet对象里的操作才能触发该事件。
1、Worksheet_Change事件:自动提示更改的内容
复制代码
Private Sub Worksheet_Change(ByVal Target As Range) '入参中Target代表被选中的单元格 Application.EnableEvents = False '禁用事件 If Target.Column = 1
Then MsgBox Target.Address & '单元格的值被修改为:' & Target.Value End If Application.EnableEvents = True '启用事件 End Sub
复制代码
2、Worksheet_SelectionChange事件:你选中了谁
可以用此事件来记录Excel单元格修改前的旧值。
复制代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim oldvalue As String MsgBox '当前选中的单元格区域为:' & Target.Address oldvalue = Target.Value If Target.Column <> 1 Then Cells(Target.Row, 'A').Select End If End Sub
复制代码
3、Worksheet_Activate事件:自动提示工作表名
Private Sub Worksheet_Activate() MsgBox '当前活动工作表为:' & ActiveSheet.Name End Sub
4、Worksheet_Deactivate事件:禁止选中其他工作表
Private Sub Worksheet_Deactivate() MsgBox '不允许选中' & ActiveSheet.Name & '工作表外的其他工作表' Worksheets('Sheet1').Select End Sub
5、Worksheet事件列表
Worksheet对象一共有9个事件可供使用。

三、Workbook事件
Workbook事件是发生在Workbook对象里的事件,进入VBE后可以看到ThisWorkbook模块。这个模块专门用来保存Workbook对象的事件过程,Workbook对象的事件过程只有保存在这个模板里才能被Excel识别

1、OPen事件
Workbook_Open事件告诉Excel,当打开工作簿时自动运行程序。
Private Sub Workbook_Open() Worksheets(1).Select End Sub
2、BeforeClose事件
每次关闭工作簿都会自动运行程序
复制代码
Private Sub Workbook_BeforeClose(Cancel As Boolean) '判断用户单击对话框中的哪个按钮,如果按下的是【否】,则修改参数的值为True If MsgBox('你确定要关闭工作簿吗?', vbYesNo) = vbNo Then '变量Cancel是程序参数,如果为True,则取消关闭工作簿 Cancel = True '取消关闭 End If End Sub
复制代码
3、Workbook_SheetChange事件
当工作簿里任意一个单元格被更改时,自动运行程序。
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) '这里入参Sh代表发生更改的单元格所在的工作表,Target表示被更改的单元格 MsgBox '当前更改的工作表为:' & Sh.Name & Chr(13) & _ '发生更改的单元格地址为:' & Target.Address End Sub
4、Workbook事件列表

四、其他事件
1、MouseMove事件
   当鼠标指针移动到按钮上时,按钮迅速闪开。鼠标和按钮就像老鹰捉小鸡游戏,这样的效果可以用MouseMove实现。
  添加一个按钮:通过“视图”——“工具栏”——“控件工具箱”添加,或者通过“开发人员选项”——“插入”——“ActiveX控件”——“命令按钮”
  右键按钮查看代码(修改按钮上文字通过Caption属性修改),编辑按钮和完成事件逻辑
复制代码
'MouseMove事件告诉Excel,当鼠标指针在cmd按钮上移动是自动运行程序 Private Sub Commanon1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim l As Integer, t As Integer l = Int(Rnd() * 10 + 125) * (Int(Rnd() * 3 + 1) - 2) '生成随机数 t = Int(Rnd() * 10 + 30) * (Int(Rnd() * 3 + 1) - 2) Commanon1.Top = Commanon1.Top + t '重新设置改按钮的top属性值 Commanon1.Left = Commanon1.Left + l '重新设置改按钮的left属性值 End Sub
复制代码
如果按钮跑远了,可以通过另外按钮Click事件设置参数
Private Sub Commanon2_Click() Commanon1.Top = 15 Commanon1.Left = 160 End Sub

2、不是事件的事件-Application对象的OnKey方法
除了对象的事件,Application对象还有两种方法,可以像事件一样让程序自动运行,分别是OnKey和OnTime
OnKey方法告诉Excel,当在键盘上按下指定键或组合键时自动运行程序。
运行ok过程,返回工作表按下Shift+e组合键即可自动运行Test
复制代码
Sub ok() Application.OnKey '+e', 'test' '当按下Shift+e组合键时,运行参test过程 End Sub Sub Test() MsgBox '你好,我在学习OnKey方法' End Sub
复制代码
3、不是事件的事件-Application对象的OnTime方法
OnTime方法告诉Excel,当到指定的时间时自动运行程序(可以是指定的某个时间,也可以是指定的某个时间之后)
复制代码
Sub ot() '一个小时后,自动运行Test过程 Application.OnTime Now() + TimeValue('01:00:00'), 'test' End Sub Sub Test() MsgBox '你好,你已经连续工作一个小时了,请注意休息!' End Sub
复制代码
  无论是OnKey还是OnTime想要让指定程序自动运行,都必须先运行该方法所在的程序,如果不运行ok或ot过程,指定的Test都不会自动运行。
  如果想省去手动执行ok和ot的步骤,可以在ThisWorkbook增加如下事件过程:  
Private Sub Workbook_Open() Call ok '运行ok过程 Call ot '运行ot过程 End Sub
五、事件实例
1、一举多得,快速录入数据
逻辑说明:
1、通过工作表的Change事件触发
2、如果C3:C65536为空,或者修改单元格数量大于1,则退出事件
3、读取“I”列数据,从第3行开始循环,读取非空数值
4、如果输入的值等于I列里的值,则进入处理逻辑
5、禁止事件,防止将字母更改为商品名称时,再次执行程序
6、目标单元格写入“产品名称”
7、目标单元格向左移动一格,写入“销售日期”
8、目标单元格向右移动一格,写入“商品代码”
9、目标单元格向右移动二格,写入“商品单价”
10、目标单元格向右移动三个,获取焦点(选中),等待输入“销售数量”
11、重启事件并退出事件
12、循环递增
复制代码
Private Sub Worksheet_Change(ByVal Target As Range) '如果更改的单元格不是C列第3行以下的单元格或更改的单元格个数大于1时退出程序

我的更多文章

下载客户端阅读体验更佳

APP专享