第5章 Excel事件

编程入门 行业动态 更新时间:2024-10-25 23:34:12

第5章 Excel<a href=https://www.elefans.com/category/jswz/34/1770959.html style=事件"/>

第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事件

本文发布于:2024-02-11 00:09:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1678090.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:事件   Excel

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!