目录:
一、什么是VBA
二、VBA编辑器
三、属性与方法
1、属性Property:对象的状态
2、方法Method:对象能做的事
3、属性与方法的区分
4、查找对象的属性与方法
5、常用对象的表示方法
四、VBA语句
1、VBA语句概述
2、判断语句
3、循环语句
十、示例代码
1、隐藏/显示单元格
2、实现智能数据验证
附录
1、学习资源
2、问题总结
一、什么是VBA
VBA(Visual Basic for Applications)是一种面向对象的语言,也就是说,在 VBA 的世界里,几乎所有可以被操作的东西,都是“对象”。你可以把“对象”理解为 Excel 中具体的实体,比如:
- 一个工作簿(Workbook)
- 一张工作表(Worksheet)
- 某个单元格区域(Range)
- 图表、按钮、形状等控件
每个对象都有自己的属性(它的状态)和方法(它能做的动作)。理解对象、掌握它的属性和方法,就是写好 VBA 宏的第一步。
二、VBA编辑器
文件→选项,即可打开“Excel选项”对话框。
自定义功能区→勾选「开发工具」,如下图所示。
在工具栏「开发工具」→「Visual Basic」→双击下图第6处的“ThisWorkbook”,即可弹出编程区域。在“ThisWorkbook”内的代码作用于整个工作簿,若选择“Sheet8(MIDI 150A_2000A)”,此时代码将仅作用于Sheet8。
Alt+F11 可快速打开 VBA编辑器,可见其就是一个类 VB 的编程环境,学过 VB语言的很好上手。
三、属性与方法
属性 = 对象的状态,方法 = 对象的动作
1、属性Property:对象的状态
属性用于描述对象的状态或特征,可以看作是对象的“形容词”。比如,字体是否加粗、背景色是什么、单元格的值是多少,都是属性。
Range("A1").Font.Bold = True '设置字体加粗
Range("A1").Interior.Color = vbYellow '设置背景色为黄色
属性通常可以被读取(看一下状态),也可以被设置(改变状态),只要它是可读写的。
当你要连续修改同一个对象的多个属性时,建议使用 With
语句,写法更简洁,逻辑也更清晰:
With Range("A1")
.Font.Bold = True
.Font.Color = RGB(255, 0, 0)
End With
2、方法Method:对象能做的事
方法代表对象可以执行的操作,类似于对象的“动词”。比如“选择”、“复制”、“保存”这些行为,都是方法。
Range("A1").Select '选中A1单元格
Range("A1").Copy '复制A1单元格
ActiveWorkbook.Save '保存当前工作簿
大多数方法支持传入参数,用来控制行为的细节。这些参数有的必须提供,有的则是可选的。有些方法还支持命名参数语法,让代码更清晰:
Range("A1:A10").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
这个例子就是使用 Sort
方法对 A1:A10 区域进行升序排序,并指定首行为标题。
3、属性与方法的区分
下面这张对比表可以帮你理清两者的区别:
比较项 | 属性/Property | 方法/Method |
---|---|---|
本质 | 描述对象的状态或特征 | 执行对象的动作或操作 |
使用格式 | 对象.属性名 | 对象.方法名(参数) |
是否有返回值 | 通常有 | 不一定全有 |
是否会改变对象状态 | 一般不会直接改变 | 通常会改变 |
'获取当前工作表名称(属性)
MsgBox ActiveSheet.Name
'删除名为 Sheet2 的工作表(方法)
ThisWorkbook.Sheets("Sheet2").Delete
4、查找对象的属性与方法
1)代码自动提示
在 VBA 编辑器中,输入对象名称后加上 .
(点号),就会自动弹出该对象所有可用的属性和方法。你会看到:
- 灰色小手图标代表属性
- 绿色小闪电图标代表方法
2)按F1查看帮助文档
选中对象或方法的名称,按下键盘上的 F1
,即可跳转到该对象的详细帮助文档。
文档中通常包含:
- 对象的层级结构(所属对象是谁)
- 所有可用属性和方法
- 每个属性/方法的用法、参数说明、代码示例
也可以登录:Office Visual Basic for Applications (VBA) ,搜索相应的对象(比如Range)。
5、常用对象的表示方法
1)工作簿
Workbooks 代表工作集合,所有的工作簿;Workbooks(n),表示已打开的第n个工作簿
Workbooks(“工作簿名称”)
ActiveWorkbook 正在操作的工作簿
ThisWorlBook 代码所在的工作薄
2)工作表
Sheets(“工作表名称”)
Sheet1 表示第一个插入的工作表,Sheet2 表示第二个插入的工作表
Sheets(n) 表示按排列顺序,第n个工作表
Activesheet 表示活动工作表,光标所在工作表
Worksheet 也表示工作表,但不包括图表工作表、宏工作表等。
3)单元格
Cells 所有单元格
Range(“单元格地址”),比如Range(“A1,C8,D0:D10”)
Cells(行数,列数)
Activecell 正在选中或编辑的单元格
Selection 正被选中或选取的单元格或单元格区域
四、VBA语句
1、VBA语句概述
1)宏语句
Sub 按钮1_Click()
Range("a1") = 10
End Sub
2)函数语句
Function SheetCount()
SheetCount = Sheets.Count
End Function
3)程序中应用语句
Sub 按钮1_Click()
Range("a1") = 10
End Sub
Function SheetCount()
SheetCount = Sheets.Count
End Function
Sub InputNumber()
Call 按钮1_Click
For x = 1 To 100
Cells(x, 1) = x
Next x
End Sub
2、判断语句
Sub 判断2() '多条件判断
Select Case Range("a1").Value
Case Is > 0
Range("b1") = "正数"
Case Is = 0
Range("b1") = "0"
Case Else
Range("b1") = "负数"
End Select
End Sub
Sub select区间判断()
Select Case Range("a2").Value
Case 0 To 1000
Range("b2") = 0.01
Case 1001 To 3000
Range("b2") = 0.03
Case Is > 3000
Range("b2") = 0.05
End Select
End Sub
3、循环语句
十、示例代码
1、隐藏/显示单元格
本示例用来实现点击按钮隐藏/显示特定单元格区域,如下面的 gif动图所示。
示例文件移步:https://download.csdn.net/download/liht_1634/91526188。
1)创建按钮
打开Excel → 顶部菜单栏选择 「开发工具」 选项卡,点击「插入」→ 在「表单控件」中选择「按钮」,在工作表空白处拖动鼠标绘制按钮。
松开鼠标自动弹出「指定宏」窗口,如下图所示。
2)编写VBA宏
在 「指定宏」 窗口点击 「新建」
打开 VBA编辑器,如下图所示。
完整代码:
Sub 按钮1_Click()
On Error Resume Next '开始错误处理
Dim btnName As String
btnName = Application.Caller '获取触发宏的按钮名称
Dim btn As Button
Set btn = ActiveSheet.Buttons(btnName)
'改变按钮上的文字
If btn.Text = "隐藏" Then
btn.Text = "显示"
Else
btn.Text = "隐藏"
End If
If Rows("3").Hidden Or Rows("6").Hidden Or Rows("8").Hidden Then
Rows("3").Hidden = False '显示行
Rows("6").Hidden = False '显示行
Rows("8").Hidden = False '显示行
Else
Rows("3").Hidden = True '隐藏行
Rows("6").Hidden = True '隐藏行
Rows("8").Hidden = True '隐藏行
End If
End Sub
3)注意事项
(1)保存文件:需保存为 .xlsm
格式(启用宏的工作簿)
(2)安全设置:首次运行宏时需在 文件→选项→信任中心→启用所有宏
(3)修改按钮:右键按钮可调整大小/文字/位置
右键 → 「指定宏」 可更换宏
2、实现智能数据验证
本示例用以确保A列只接受数字输入(包括整数、小数、负数和科学计数法),并在输入非数字内容时给出提示并清空单元格。
1)使用说明
按
Alt+F11
打开VBA编辑器在左侧项目窗口中双击对应的工作表(如
Sheet1
)将上述代码粘贴到代码窗口中
2)完整代码
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo CleanExit ' 错误处理
' 只处理A列的更改
Dim changedCells As Range
Set changedCells = Intersect(Target, Me.Columns("A"))
If changedCells Is Nothing Then Exit Sub
Application.EnableEvents = False ' 禁用事件防止循环触发
Application.ScreenUpdating = False ' 禁用屏幕更新
Dim cell As Range
For Each cell In changedCells
' 跳过空单元格
If Not IsEmpty(cell) And cell.Value <> "" Then
' 检查是否为有效数字
If Not IsNumeric(cell.Value) Then
' 非数字处理
MsgBox "A列只接受数字输入!" & vbCrLf & _
"单元格 " & cell.Address & " 输入了无效内容: " & cell.Value, _
vbExclamation, "输入错误"
cell.ClearContents
' 检查文本型数字(如'123)
ElseIf VarType(cell.Value) = vbString Then
MsgBox "请勿输入文本格式的数字!" & vbCrLf & _
"单元格 " & cell.Address & " 的内容将被转换为数字", _
vbInformation, "格式修正"
cell.Value = Val(cell.Value) ' 转换为数值
End If
End If
Next cell
CleanExit:
Application.EnableEvents = True ' 确保事件重新启用
Application.ScreenUpdating = True
End Sub
附录
1、学习资源
VBA常用技巧资源:非常详实的VBA常用技巧,本内容来自于:ExcelHome。
2、问题总结
1)Microsoft已阻止宏运行
右键 → 「属性」 → 「解除锁定」
路,还得一个人走,任谁也帮不了谁。远方再远,慢慢走,总会到…… 觉得不错,动动发财的小手点个赞哦!