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