1.变量
变量的划分方式:一般变量可以按照数据类型划分,也可以按照作用范围进行划分
1.1 按照数据类型划分的变量
- 变量按照数据类型一般分为:数据变量、对象变量和数组变量
-
1.1.1 数据变量的定义
数据变量的定义一般用
dim 变量名 as 变量类型的方式;但基于一般VBA项目较小情况,可以不指定数据类型,直接使用
dim 变量名Dim a As Integer '完整定义方式,指明数据类型Dim i '简单定义方式,不指明数据类型
1.1.2 对象变量的定义
数据变量的定义一般用
dim 变量名 as 对象类型的方式;对象变量不能省略对象类型,再不济也需要定义成Object;
Dim rng As Range '定义rng为一个range类型rng = Workbooks("AA").Worksheets("sheet1").Range("A1")
1.1.3 数组变量的定义
VBA中最常用的数组为一维数组和二维数组
- 只有横排的一行数据是一维数组。纵排的一列数据和矩阵数据都是二维数组
Dim ary1(1 To 5) '定义一个5行列的一维数组Dim ary2(1 To 5, 1 To 6) '定义一个5行6列的二维数组
1.2 按照作用范围划分变量
1.2.1 局部变量
局部变量只能在过程内定义,且仅作用于本过程 ```vbnet Public Sub 宏1() Dim i i = 1 Debug.Print i ‘输出结果为1 End Sub
Public Sub 宏2() Debug.Print i ‘输出结果为”” End Sub
:::info以上代码中,宏1可以输出1。但变量i定义在宏1的过程中,属于宏1的局部变量,宏2无法调用此变量,故宏2输出"":::<a name="Xggpo"></a>### 1.2.2 全局变量1. 全局变量定义在**模块顶部;**2. `Public`关键字定义的全局变量可以作用于所有模块,而`Private`关键字定义的全局变量只能作用于其所在的模块;3. 在工作表中定义的public变量在其他模块也不能直接调用。如果调用需要用`工作表名.变量名`;4. 为了防止变量污染,一般命名全局变量使用`public global_i`,`private module_i````vbnetPublic aPrivate bPublic Sub 宏1()a = 4b = 5End SubPublic Sub 宏2()Debug.Print a '输出结果为4Debug.Print b '输出结果为5End Sub
'module 1Public aPrivate bPublic Sub 宏1()a = 4b = 5End Sub----------------------------------------------------------------'module 2Public Sub 宏2()Debug.Print a '输出结果为4Debug.Print b '输出结果为""End Sub
:::info
- 在模块module 1中定义的a,b变量在module 2中打印。只有用public关键字定义的全局变量a能够返回数据,而b输出结果为””:
-
1.3 变量的赋值
数据变量赋值可以使用关键字
Let,但Let关键字通常省略;- 对象变量的赋值需要使用
Set关键字,且该关键字不能省列; - 数组变量赋方式较多,花括号方式,Array()方式,转置函数方式等 ```vbnet Public Sub 宏1()
Dim a ‘定义数据变量a,未指定数据类型 Dim rng As Range ‘定义单元格对象变量rng
a = 1 Set rng = [A1] ‘把A1单元格赋值给单元格对象
Debug.Print a Debug.Print rng.Address
End Sub
:::info代码运行结果为:<br /> 1 <br />$A$1:::```vbnetPublic Sub 宏1()[b1:f1] = Array(1, 2, 3, 4, 5)[b2:f2] = [{1,2,3,4,5}][b4:b6] = WorksheetFunction.Transpose(Array(1, 2, 3))[b8:b10] = [{1;2;3}]End Sub
:::info
各种数组赋值方式的区别:
- 花括号方式既能赋值一维数组也能赋值二维数组。其中
,隔开的横向排列(为一维数组),;隔开纵向排列(为二维数组) - Array()方式中括号内只能以
,隔开,且隔开的元素横向排列 若想通过Array的方式赋值纵向数组,需要使用
WorksheetFunction.Transpose函数 :::1.4 变量的强制声明
如果打开变量强制声明按钮,则强制用dim声明所有变量(工具-选项)

- 强制声明变量后,在模块的最上方出现
Option Explicit强制声明提示,该提示可以通过被注释掉解除变量的强制声明; - 建议实操过程中用所有变量都用dim声明,为了防止变量污染
- 查看一个变量是否被定义,选中改变量,右键-定义

2.常量
- 常量就是固定不变的数据
- 常量被重新赋值时会报错,即可读不可写
- 常量不用类似变量需要先定义再赋值,而是通过关键字直接定义和赋值
- 常量不能是对象类型
2.1 按照来源划分的常量
- 用户自定义常量
-
2.2 按照作用范围划分的常量
定义过程级常量的关键字
Const- 定义模块级常量的关键字
Private Const - 定义工程级常量的关键字
Public Const```vbnet ‘module 1
Public Const a = 1 ‘定义工程级常量 Private Const b = 2 ‘定义模块级常量
Public Sub 宏1()
Const c = 3 '定义过程级常量Debug.Print aDebug.Print bDebug.Print c
End Sub
Public Sub 宏2()
Debug.Print aDebug.Print bDebug.Print c
End Sub
‘module 2
Public Sub 宏3()
Debug.Print aDebug.Print bDebug.Print c
End Sub
:::info输出结果:1. 宏1中能正常输出a b c为1 2 32. 宏2中只能输出a b为1 23. 宏3中只能输出a为1:::<a name="NEyK3"></a># 3.数据类型| 数据类型 | 类型含义 | 变量声明符 | 存储空间(byte) | 范围描述 || --- | --- | --- | --- | --- || Byte | 字节 | - | 1 | 0-255的整数 || Boolean | 布尔值 | - | 2 | True、False || Integer | 整型 | % | 2 | -32768-32767之间的整数 || Long | 长整型 | & | 4 | || Single | 单精度浮点型 | ! | 4 | || Double | 双精度浮点型 | # | 8 | || Currency | 货币类型 | @ | 8 | || Decimal | 精确类型 | - | 14 | || Date | 日期型 | - | 8 | || String(变长) | 定长字符串 | $ | 10+字符串长度 | || String(定长) | 变长厂字符串 | - | 字符串长度 | || Object | 对象变量 | - | 4 | || Varient | 变体型 | - | | || 用户自定义 | | - | | |```vbnetPublic Sub 宏1()Dim a%, b$ '此处声明等价于 Dim a as Integer,b as Stringa = 3b = "hello world!"Debug.Print aDebug.Print bEnd Sub
:::info
运行结果为:
3
hello world!
:::
