看了本文标题,什么叫事件?
excel将下面叫做“数据”的工作表根据分类条件拆分成多个sheet工作表,表名为分类条件。
我的理解是发生了什么就执行一些相应的操作
可能比较难理解。下面我们就通过三个案例随事件对象加以了解。
1
案例1题目:
聚光灯事件,点击任意或多个单元格,单元格所在行自动出现背景色。
结果如下图:
分析:
点击单元格就自动实现聚光灯效果,自动执行代码就要用到事件对象
操作:
1.点击Visual Basic,需要双击对应的表选择对象为worksheet,事件为selectionChange,如下图:
代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '每次操作执行前清除掉背景色 Cells.Interior.Pattern = xlNone '设置所选行的背景色 Selection.EntireRow.Interior.Color = 65535End Sub
如果你想把代码写到模板中。只需要在这里调用一下模板中的方法即可
'模板中sub jgd()'每次操作执行前清除掉背景色 Cells.Interior.Pattern = xlNone '设置所选行的背景色 Selection.EntireRow.Interior.Color = 65535end sub'工作表中Private Sub Worksheet_SelectionChange(ByVal Target As Range) '调用call方法 call jgdEnd Sub
2
案例2题目:
对工作簿做修改后点击保存,工作簿数据自动备份,以时间起名字备份,方便找回历史数据
分析:
自动执行代码就要用到事件对象,所以自动备份又要用到事件对象了
案例1 是工作表的事件对象,这次是工作簿的事件对象
操作:
1.点击Visual Basic,需要双击thisworkbook,事件为beforesave,如下图:
代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)'注意路径,d盘下面必须有data文件夹,否则报错ThisWorkbook.SaveCopyAs "d:\data\" & Format(Now(), "yyyymmddhhmmss") & ".xls"End Sub
3
案例3题目:
制作验证密码,打开工作簿,自动弹出验证密码框,输入正确密码显示sheet表,否则关闭工作簿
分析:
1.这不是针对哪一张工作表,而是针对工作簿的事件对象
2.我们要隐藏除了登录页面的其他所有工作表
3.验证密码,正确显示对应的表,错误退出整个工作簿
代码:
'工作簿关闭时执行的操作,下次打开就会隐藏所有表Private Sub Workbook_BeforeClose(Cancel As Boolean)Dim sht As WorksheetFor Each sht In Sheets If sht.Name <> "登录界面" Then '隐藏表 sht.Visible = xlSheetVeryHidden End IfNextEnd Sub'工作簿打开时的操作Private Sub Workbook_Open()Dim ii = InputBox("请输入密码")If i = "123" Then'显示表 Sheet1.Visible = xlSheetVisible Sheet2.Visible = xlSheetVisible Sheet3.Visible = xlSheetVisibleElseIf i = "456" Then'显示表 Sheet4.Visible = xlSheetVisible Sheet5.Visible = xlSheetVisible Sheet6.Visible = xlSheetVisibleElse ThisWorkbook.CloseEnd If End Sub
思考:为什么不在打开时是隐藏表而在关闭时隐藏表?
答:如果打开时隐藏表因为执行代码需要时间,运行速度慢的话,用户打开表的一瞬间代码还没执行,可以看到表一闪而过。
总结
今天学到了工作表的selectionChange事件、工作簿的BeforeSave、BeforeClose、Open事件。