VBA事件

with语句

简化代码,让代码简洁易懂,不需要输入重复的内容

with 对象
.属性1=属性值
.属性2=属性值
.属性3=属性值
.属性N=属性值
end with

例如

Sub test()
Sheet2.Range("a1") = 1
Sheet2.Range("a2") = 2
Sheet2.Range("a3") = 3
Sheet2.Range("a4") = 4
End Sub
-------------------------------等价
Sub tset()
With Sheet2
    .Range("al") = 1
    .Range("a2") = 2
    .Range("a3") = 3
    .Range("a4") = 4
End With

Sub 设置字体()
Range("a1").Font.Size = 20
End Sub

VBA事件

在这里插入图片描述
在这里插入图片描述

SelectionChange(若选区变化,则自动运行宏)

完后鼠标点哪里,整行填充颜色

在模块中
Sub tt()
Cells.Interior.Pattern = xlNone
Selection.EntireRow.Interior.Color = 65535
End Sub

用事件,只要选区发生变化,就执行 tt 代码

'事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call tt
End Sub

在这里插入图片描述

'事件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Excel.Application.EnableEvents = False '先关闭事件
Call tt
Excel.Application.EnableEvents = True '再打开事件
End Sub

change(单元格发生变化,自动执行宏)

一般为了防止因为事件无线循环

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

Range("l1:q10000").ClearContents
Range("A1:F232").AutoFilter Field:=4, Criteria1:=Range("i2")
Range("A1:F232").Copy Range("l1")
Range("A1:F232").AutoFilter

Application.EnableEvents = True
End Sub

在这里插入图片描述

Activate(激活,点击工作表,执行宏)

Private Sub Worksheet_Activate()

ActiveWorkbook.RefreshAll  '全部刷新

End Sub

在这里插入图片描述


工作簿同样有许多事件
在这里插入图片描述

自动备份

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'每次保存都会自动备份一份到c盘的data目录下

ActiveWorkbook.SaveCopyAs "C:\data\" & Format(Now(), "yyyy年mm月dd日hh点mm分ss秒") & ".xls"

End Sub

注意:xlsx文件类型只能存数据
在这里插入图片描述
在这里插入图片描述

练习

问题:
为作业表制作密码验证。
要求:
打开文件时只显示登录界面表隐藏其他所有表,弹出对话框输入密码。输入123则显示张三的三张表,输入456则显示李四的三张表。
在这里插入图片描述

在Thisworkbook中的代码
Private Sub Workbook_Open()

Dim i, j As Integer
j = Sheets.Count
For i = 2 To j
    Sheets(i).Visible = 0
Next

MsgBox "欢迎你!!!!!"
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim i, j As Integer
j = Sheets.Count
For i = 2 To j
    Sheets(i).Visible = 0
Next
End Sub
在模块中的代码
Sub 张三()
Dim s As Integer
s = InputBox("请输入张三的密码:")
If s = 123 Then
    Dim i As Integer
    For i = 2 To 4
        Sheets(i).Visible = 1
    Next
    Sheets(2).Select
Else: MsgBox ("密码不对,请输入密码!")
End If

End Sub

Sub 李四()
Dim s As Integer
s = InputBox("请输入李四的密码:")
If s = 456 Then
    Dim i As Integer
    For i = 5 To 7
        Sheets(i).Visible = 1
    Next
    Sheets(5).Select
Else: MsgBox ("密码不对,请输入密码!")
End If

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值