1 为什么要声明变量
1.1代码的三个组成部分
- 程序就是处理数据的自动化语言
- 每段代码都是由3个部分组成:I 输入数据,处理数据,O 输出数据(返回结果)。
- I/O
- 输入数据:声明(定义)数据,赋初值---声明变量的数据类型,赋初值等就是第一部分,定义和输入数据!
- 处理数据
- 输出数据(返回结果)
1.2 常量和变量严格声明
- 默认是不强制声明
- 在模块的开头写上 option explict 会要求强制给每个变量声明!
- 注意点:(只在本模块生效,写在本模块开头!)
- Option Explicit必须写在模块开头,所有过程之前(所有sub之前);
- Option Explicit的作用域是本模块,如果要限制多个模块,每个模块都需要写入;
- Option Explicit可以通过在工具栏的选项卡中进行勾选设置。
工具里也可以设置,必须要求变量声明
2 常量 constant
常量是什么
- 就是是个数值,但是内容不需要改变,不能改变
哪些情况下需要常量?
- 作用是保证这个常量值不会被修改,导致出一些意料外的BUG
- 有的是这个常量就不应该,不需要改变
常量如何定义?
- 一个常量就等于固定的值
- 如 a=3 ,这样写是不对的,因为你还可以让 a=4
- 所以下面才是对的
- const π as double = 3.1415926
Sub 测试001()
a = 3.1415926
Const b As Double = 3.1415926
Debug.Print a
Debug.Print b
a = 315
b = 456
Debug.Print a
Debug.Print b '会报错,不能给常量赋值
End Sub
3 变量 varivant
3.1 什么是变量?
- 变量的意义就是可以随便改变为不同的数据类型,
- 变量,就是将一个存储空间命名为 变量名,这块存储空间内可以存储和改变为 各种类型的数据
- 如果VBA内这个变量未被事先声明数据类型,那么可以随便改变这个变量的赋值!
- 也就是说,VBA里,如果变量没声明为具体类型,可以和python一样随便改变变量类型
- VBA里可以被重新赋值,但是声明了某种类型后不能随便改类型了
- 如果这个变量被定义的了数据类型,那么只能被重新赋值为这个类型的其他数据,不能赋值为其他类型!
3.2 变量声明语法
- 定义语法
- dim a
- dim var as varivant (未定义具体类型的变量)
- dim var as integer (某种类型的变量)
- dim var as object
- 或不定义 默认为变量
- 直接直接赋值 a=1 也相当于同时做了定义 未定义某个数据的变量类型,也就是相当于 dim var as varivant
3.3 变量默认值
- 变量可以不赋值。就开始运算
- 变量的默认值为none 想当于0 ?
3.4 变量赋值和重新赋值
- 一个变量可能等于各种数据类型
- 变量可以被重新赋值,但是和python的重新赋值有不同!!
Sub hello_world()
Dim b As Integer
Const c As Double = 3.1415
Debug.Print ("hello world")
a = 3
Debug.Print (a)
a = 4
Debug.Print (a)
a = "可以对同一个变量赋值"
Debug.Print a
b = 1
Debug.Print (b)
b = 2
Debug.Print (b)
b = "数值类型的变量b可以改变吗?" '这里会报错
Debug.Print (b)
Debug.Print (c)
c = 123 '这里会报错 不允许给常量赋值!
Debug.Print c
End Sub
4 常量和变量的类型
4.1 赋值必要性举例
- dim a as long
- dim a as integer '数据范围太小,经常会报错,慎用,比如4W就容易出错
4.2 数据类型种类
字符串 | string | 在""之内 | |
整形 | integer | -32768 ~ 32767 | 范围很小,就6万个数空间 |
长整型 | long | -2147483648 ~ 2147483647 | |
单精度型 | single | 在表示负数时: -3.402823E38 ~ -1.401298E-45 在表示正数时: 1.401298E-45 ~ 3.402823E38 | |
双精度型 | duoble | 在表示负数时: -1.79769313486231E308 ~ -4.94065645841247E-324 在表示正数时: 4.94065645841247E-324 ~ 1.79769313486231E308 | |
日期型 | date | | |
布尔型 | bool | 0/1 | |
不确定变体 | var | 不确定数据类型---不定义变量类型也是这样!!!! | 任意值 |
对象 | object | 对象,实例 | |
枚举型 | enum | | |
位 | byte | | |
4.3 枚举型
Enum workdays
a
b
c
d
e
f
g
End Enum
Sub 测试002()
Dim x As workdays
For Each i In workdays '枚举型数据不能用for each循环
Debug.Print i
Next i
End Sub
5 变量的赋值
5.1 变量的类型不同有差别
- 对象:对象是一种特殊的数据类型,可以表示工作簿、工作表、单元格等,如:range(“A2”)
- set r1= range("a1:a6")
- 其他数据类型
- 语法
- let a= 5
- a=5 'let是可以省略的
- 而set 对象是, set不可以省略
5.2 变量的赋值方法
- 普通变量
- (let) i=3
- let 可以省略
- 对象变量
- dim wb as object
- set wb1= thisworkbook
6 变量作用域(判断依据:关键字+ 放在那一层!)
- 跨模块级变量
- 范围是所有模块,声明方式为:Public varname as type;
- 模块级变量 (本模块内生效)
- 作用范围为单个模块,直接在所有过程之前声明:Dim varname as type
- private
- dim
- 过程级变量
- dim / static
- 仅限于过程内:Dim varname as type;