今日学习目标
- 理解变量的概念
- 掌握常用数据类型
- 学会声明和使用变量
- 了解作用域
知识点
1. VBA变量怎么声明
变量是给数据起的名字,运行期间可随时读取和修改,VBA用 Dim 声明:
vbaDim 变量名 As 数据类型命名以字母或中文开头,不能含空格和点号,不能用保留字。模块顶部的 Option Explicit 要求先声明再使用,建议始终保留。
2. 常用数据类型
| 数据类型 | 说明 | 示例 |
|---|---|---|
| Integer | 整数(-32768~32767) | Dim i As Integer |
| Long | 长整数(约±21亿) | Dim l As Long |
| String | 字符串 | Dim s As String |
| Double | 双精度浮点数 | Dim d As Double |
| Boolean | 布尔值 | Dim b As Boolean |
| Date | 日期 | Dim dt As Date |
经验:整数用Long,金额小数用Double;日期字面量用井号 #1999-1-1#。不声明类型就是Variant,尽量不用。
3. 赋值、拼接与类型转换
用 = 赋值,& 拼接字符串和数字,vbCrLf 换行,行尾 _ 续行。从单元格或输入框拿到的数据常是文本,计算前要先转换:CInt、CDbl、CStr、Val。
4. 变量的作用域
- 过程级:
Dim在过程内,仅本过程可用,过程结束即销毁 - 模块级:
Dim在模块顶部,本模块所有过程可见 - 全局级:
Public在模块顶部,整个工程可用
能用小的作用域就不用大的。
今日代码
vbaSub 变量示例()
' 声明变量
Dim name As String
Dim age As Integer
Dim price As Double
Dim isStudent As Boolean
' 赋值
name = "张三"
age = 25
price = 99.5
isStudent = True
' 使用
MsgBox "姓名: " & name & vbCrLf & _
"年龄: " & age & vbCrLf & _
"价格: " & price
End Sub实战场景
背景:销售小王要算报价——单价199.9元,买3件打8折,需要精确到分的应付金额。
vbaSub 计算订单金额()
Dim 单价 As Double, 数量 As Long, 折扣 As Double, 应付 As Double
单价 = 199.9
数量 = 3
折扣 = 0.8
应付 = 单价 * 数量 * 折扣
MsgBox "应付金额: " & Format(应付, "0.00") & " 元"
End Sub运行结果:199.9 × 3 × 0.8 = 479.76。Format(应付, "0.00") 强制显示两位小数,避免浮点尾巴;以后改单价或折扣只动赋值那几行,这就是变量比硬写数字强的地方。
练习题
- 声明一个变量存储你的姓名和年龄
- 创建一个计算两个数之和的程序
- 尝试不同数据类型的变量
参考解答
1. 使用Dim语句声明:Dim name As String, age As Integer,然后分别赋值。 2. 声明两个数值变量,输入或赋值后计算和:Dim a As Integer, b As Integer, sum As Integer。 3. 分别声明Integer、String、Boolean、Date等类型变量并赋值观察结果。
延伸练习
- 用
InputBox输入出生年份,计算并输出年龄(Year(Date)取当前年份)。 - 借助临时变量t交换两个变量的值。
常见错误与排查
| 报错/现象 | 原因 | 解决方法 |
|---|---|---|
Run-time error '13': Type mismatch |
把非数字文本赋给数值变量 | 检查来源,用Val/CInt转换 |
Compile error: Variable not defined |
变量未声明或拼错 | 补Dim声明,核对拼写 |
| 两个"数字"相加变成拼接 | 单元格读到的是文本 | 计算前用 Val() 转数值 |
学习总结
VBA变量三件事:先声明、定对类型、控制作用域;单元格数据先转换再计算。
由在线工具箱(www.vba.net)整理制作