第四部分:好的,第四部分:宏(VBA)基础课。从零到能写自动化脚本。
---
一、宏是什么
本质: 把重复操作录下来,一键重放。背后是VBA代码,可以进一步编辑、加循环、加判断。
---
二、开启宏功能
1. 文件 → 选项 → 自定义功能区 → 勾选“开发工具”。
2. 保存文件时选择 “.xlsm” 启用宏的工作簿,否则宏会丢失。
---
三、录制宏:写代码最懒的办法
步骤:
1. 开发工具 → “录制宏” → 起个名,设快捷键,确定。
2. 做你的操作(比如给表格套格式、排序、筛选)。
3. 点“停止录制”。
查看代码: 开发工具 → Visual Basic(或Alt+F11)→ 模块1,就能看到刚才生成的VBA代码。
运行: 开发工具 → 宏 → 选择宏名 → 执行。
---
四、VBA编辑器环境
· 工程资源管理器(左): 显示工作表、模块、ThisWorkbook。
· 代码窗口: 写代码的地方。
· 立即窗口(Ctrl+G): 测试单行代码,比如 ?Range("A1").Value 直接输出A1值。
· 常用操作: 双击工作表或模块,插入→模块新建代码区。
---
五、第一个自定义宏:弹窗打招呼
```vba
Sub SayHello()
MsgBox "你好,我是宏!"
End Sub
```
在模块里粘贴,按F5运行。MsgBox 是弹出消息框。
---
六、核心对象(分层理解)
Excel万物皆对象: Application → Workbooks → Worksheets → Range/Cells。
1. 操控单元格
```vba
Range("A1").Value = 100 '给A1赋值
Range("A1:A10").Value = 5 '批量赋值
Cells(1, 2).Value = "数据" '第1行第2列即B1
Range("A1").Select '选中A1
```
2. 引用工作表
```vba
Sheets("Sheet1").Range("A1") = 1
Worksheets(1).Cells(1,1) = 1 '第1个工作表
```
3. 获取最后一行动态范围
```vba
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 'A列最后非空行
Range("A1:A" & lastRow).Select
```
---
七、变量与数据类型
```vba
Dim 名字 As String
Dim 年龄 As Integer
Dim 工资 As Double
Dim 有效 As Boolean
Dim 日期 As Date
名字 = "张三"
年龄 = 30
```
必须用Dim声明? 不是强制,但养成好习惯避免混乱。
---
八、条件判断(If & Select Case)
```vba
If Range("B2").Value >= 60 Then
Range("C2").Value = "及格"
Else
Range("C2").Value = "不及格"
End If
'多条件
Select Case Range("B2").Value
Case Is >= 90: Range("C2") = "优秀"
Case Is >= 60: Range("C2") = "及格"
Case Else: Range("C2") = "差"
End Select
```
---
九、循环(For & Do)
```vba
'给A1到A10填序号
For i = 1 To 10
Cells(i, 1).Value = i
Next i
'遍历非空行
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""
Cells(r, 3) = Cells(r, 2) * 2 'C列 = B列×2
r = r + 1
Loop
```
中途退出: Exit For,Exit Do
---
十、与用户交互(InputBox + MsgBox)
```vba
Dim 姓名 As String
姓名 = InputBox("请输入姓名:")
MsgBox "欢迎," & 姓名 & "!", vbInformation, "问候"
```
MsgBox返回值: 可以判断按了“是/否/取消”,用于分支。
---
十一、事件过程(自动触发)
VBA可以在特定事件发生时自动运行。
· 工作表事件: 双击VBA编辑器里的Sheet对象,左侧下拉选Worksheet,右侧选事件(如Change,SelectionChange)。
例如:A1内容改变就自动执行:
```vba
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "A1变了!"
End If
End Sub
```
· 工作簿事件: 放在ThisWorkbook里,如Open(打开文件时自动运行)。
```vba
Private Sub Workbook_Open()
MsgBox "欢迎使用此报表", vbInformation
End Sub
```
---
十二、宏与函数的区别
特性 函数(Function) 宏(Sub)
目的 计算并返回值 执行操作
使用位置 可直接在工作表公式里调用 只能通过按钮/快捷键/事件运行
能否修改单元格 不能直接修改其他单元格 能,所有操作都能做
但VBA也可以写自定义工作表函数(UDF),放到模块中返回结果即可在格子使用。
---
十三、实用小例子
一键清除筛选:
```vba
Sub 清除筛选()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
```
复制粘贴为值(去公式):
```vba
Sub 粘贴为值()
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
```
给指定区域加超链接的快速标记: 略。
---
十四、保存与安全
· 文件格式必须 .xlsm 或 .xlsb。
· 首次打开含有宏的文件,Excel会禁用,需点击“启用内容”。
· 可设为受信任位置:文件→选项→信任中心→信任中心设置→受信任位置,添加常用文件夹。
---
十五、进阶方向
· 学会录制宏 → 看生成的代码 → 学属性方法。
· 了解数组、字典对象 (Scripting.Dictionary) 提升速度。
· 学习用户窗体 (UserForm) 制作专业界面。
· 错误处理:On Error Resume Next / On Error GoTo 标签。
---
宏基础到此结束。
现在,你能不能试着录一个简单的宏,并打开VBA编辑器看看它长什么样?有任何步骤卡住,随时问我下一个想细化的点。基础课。从零到能写自动化脚本。
---
一、宏是什么
本质: 把重复操作录下来,一键重放。背后是VBA代码,可以进一步编辑、加循环、加判断。
---
二、开启宏功能
1. 文件 → 选项 → 自定义功能区 → 勾选“开发工具”。
2. 保存文件时选择 “.xlsm” 启用宏的工作簿,否则宏会丢失。
---
三、录制宏:写代码最懒的办法
步骤:
1. 开发工具 → “录制宏” → 起个名,设快捷键,确定。
2. 做你的操作(比如给表格套格式、排序、筛选)。
3. 点“停止录制”。
查看代码: 开发工具 → Visual Basic(或Alt+F11)→ 模块1,就能看到刚才生成的VBA代码。
运行: 开发工具 → 宏 → 选择宏名 → 执行。
---
四、VBA编辑器环境
· 工程资源管理器(左): 显示工作表、模块、ThisWorkbook。
· 代码窗口: 写代码的地方。
· 立即窗口(Ctrl+G): 测试单行代码,比如 ?Range("A1").Value 直接输出A1值。
· 常用操作: 双击工作表或模块,插入→模块新建代码区。
---
五、第一个自定义宏:弹窗打招呼
```vba
Sub SayHello()
MsgBox "你好,我是宏!"
End Sub
```
在模块里粘贴,按F5运行。MsgBox 是弹出消息框。
---
六、核心对象(分层理解)
Excel万物皆对象: Application → Workbooks → Worksheets → Range/Cells。
1. 操控单元格
```vba
Range("A1").Value = 100 '给A1赋值
Range("A1:A10").Value = 5 '批量赋值
Cells(1, 2).Value = "数据" '第1行第2列即B1
Range("A1").Select '选中A1
```
2. 引用工作表
```vba
Sheets("Sheet1").Range("A1") = 1
Worksheets(1).Cells(1,1) = 1 '第1个工作表
```
3. 获取最后一行动态范围
```vba
lastRow = Cells(Rows.Count, 1).End(xlUp).Row 'A列最后非空行
Range("A1:A" & lastRow).Select
```
---
七、变量与数据类型
```vba
Dim 名字 As String
Dim 年龄 As Integer
Dim 工资 As Double
Dim 有效 As Boolean
Dim 日期 As Date
名字 = "张三"
年龄 = 30
```
必须用Dim声明? 不是强制,但养成好习惯避免混乱。
---
八、条件判断(If & Select Case)
```vba
If Range("B2").Value >= 60 Then
Range("C2").Value = "及格"
Else
Range("C2").Value = "不及格"
End If
'多条件
Select Case Range("B2").Value
Case Is >= 90: Range("C2") = "优秀"
Case Is >= 60: Range("C2") = "及格"
Case Else: Range("C2") = "差"
End Select
```
---
九、循环(For & Do)
```vba
'给A1到A10填序号
For i = 1 To 10
Cells(i, 1).Value = i
Next i
'遍历非空行
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""
Cells(r, 3) = Cells(r, 2) * 2 'C列 = B列×2
r = r + 1
Loop
```
中途退出: Exit For,Exit Do
---
十、与用户交互(InputBox + MsgBox)
```vba
Dim 姓名 As String
姓名 = InputBox("请输入姓名:")
MsgBox "欢迎," & 姓名 & "!", vbInformation, "问候"
```
MsgBox返回值: 可以判断按了“是/否/取消”,用于分支。
---
十一、事件过程(自动触发)
VBA可以在特定事件发生时自动运行。
· 工作表事件: 双击VBA编辑器里的Sheet对象,左侧下拉选Worksheet,右侧选事件(如Change,SelectionChange)。
例如:A1内容改变就自动执行:
```vba
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
MsgBox "A1变了!"
End If
End Sub
```
· 工作簿事件: 放在ThisWorkbook里,如Open(打开文件时自动运行)。
```vba
Private Sub Workbook_Open()
MsgBox "欢迎使用此报表", vbInformation
End Sub
```
---
十二、宏与函数的区别
特性 函数(Function) 宏(Sub)
目的 计算并返回值 执行操作
使用位置 可直接在工作表公式里调用 只能通过按钮/快捷键/事件运行
能否修改单元格 不能直接修改其他单元格 能,所有操作都能做
但VBA也可以写自定义工作表函数(UDF),放到模块中返回结果即可在格子使用。
---
十三、实用小例子
一键清除筛选:
```vba
Sub 清除筛选()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
```
复制粘贴为值(去公式):
```vba
Sub 粘贴为值()
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End Sub
```
给指定区域加超链接的快速标记: 略。
---
十四、保存与安全
· 文件格式必须 .xlsm 或 .xlsb。
· 首次打开含有宏的文件,Excel会禁用,需点击“启用内容”。
· 可设为受信任位置:文件→选项→信任中心→信任中心设置→受信任位置,添加常用文件夹。
---
十五、进阶方向
· 学会录制宏 → 看生成的代码 → 学属性方法。
· 了解数组、字典对象 (Scripting.Dictionary) 提升速度。
· 学习用户窗体 (UserForm) 制作专业界面。
· 错误处理:On Error Resume Next / On Error GoTo 标签。
---
宏基础到此结束。
现在,你能不能试着录一个简单的宏,并打开VBA编辑器看看它长什么样?有任何步骤卡住,随时问我下一个想细化的点。
夜雨聆风