vba 常量与变量
常量
常量为变量的一种特例,用Const定义,且定义时赋值,程序中不能改变该值,作用域也如同变量作用域。如下定义:Const Pi=3.1415926 as single
变量
(1)变量是用于临时保存数值的地方。VBA允许使用未定义的变量,默认类型是变体变量 Variant
(2)在模块通用说明部分,加入Option Explicit语句可以强迫用户进行变量定义
![](https://img2023.cnblogs.com/blog/1636696/202303/1636696-20230320173326525-1638205452.png)
此时若不声明变量就使用会报错,变量未定义
在工具->选项中可以设置是否要求变量申明,设置后会自动在模块通用说明部分加入Option Explicit
![](https://img2023.cnblogs.com/blog/1636696/202303/1636696-20230320173041205-1041027264.png)
(3)变量数据类型
下表列出了VBA支持的数据类型,还列出了各种类型的变量所需要的存储空间和能够存储的数值范围。
此外用户还可以根据以下类型用Type自定义数据类型。
数据类型 | 存储空间 | 数值范围 |
Byte(位) | 1字节 | 0-255 |
Boolean(布尔型) | 2字节 | True或者False |
Integer(整型) | 2字节 | -32,768 ~ 32,767 |
Long(长整型) | 4字节 | -2,147,483,648 ~2,147,483,647 |
Single
(单精度浮点数,类似于C语言的float)
|
4字节 |
负值范围:-3.402823E38 ~ -1.401298E-45
正值范围:1.401298E-45 ~ 3.402823E38
|
Double
(双精度浮点型)
|
8字节 |
负值范围:-1.79769313486232E308 ~ -4.94065645841247E-324
正值范围:4.94065645841247E-324 ~ 1.79769313486232E308
|
Currency (货币类型) |
8字节 | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 |
Decimal (精准型) |
14字节 | 不包括小数时: -79,228,162,514,264,337,593,543,950,335 ~ +79,228,162,514,264,337,593,543,950,335 包括小数时: -7.9228162514264337593543950335 ~ +7.9228162514264337593543950335 |
Date | 8字节 | 1000年1月1日 ~ 9999年12月31日 |
Object | 4字节 | 任何引用对象 |
String(长字符串) | 10字节+1字节/字符 | 0 ~ 约20亿 |
String(固定长度) | 字符串的长度 | 1 ~约65400 |
Varient(数字) | 16字节 | double范围内的任何数值 |
Varient(文本) | 22字节+1字节/字符 | 数据范围和变长字符串相同 |
注: Currency是vb独有的一种数据类型,他用来进行货币的换算和定点计算特别方便(他的精度是确定的,不会出现精度带来的舍入误差)。
decimal与single和double的区别是,前者不是浮点数据类型,他的精度是确定的。因为使用的内存空间极大,他可以将精度控制得很准确(比后两者更准确),但因此牺牲了其性能,在有精度要求(无法容忍精度带来的舍入误差,比如财务计算)的情况下建议使用decimal。
decimal与single和double的区别是,前者不是浮点数据类型,他的精度是确定的。因为使用的内存空间极大,他可以将精度控制得很准确(比后两者更准确),但因此牺牲了其性能,在有精度要求(无法容忍精度带来的舍入误差,比如财务计算)的情况下建议使用decimal。
Varient是变体型,可以是任意类型,可变。
(4)变量定义语句及变量作用域
![](https://img2023.cnblogs.com/blog/1636696/202303/1636696-20230306172704220-1146755544.png)
一般变量作用域的原则是,在哪部分定义就在哪部分起作用,模块中定义则在该模块起作用。
在 Dim 语句中不必提供数据类型.如果没有数据类型,变量将被定义为 Variant 类型,因为VBA 中默认的数据类型是 Variant。你知道这一点后,最初的反应也许是觉得应该不用自己决定数据类型,而将一切抛给VBA.这种观念是完全错误的。你必须决定选择使用何种数据类型。因为Variant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能。VBA必须辨别Variant类型的变量中存储了何种类型的数据。
(5)变量赋值
赋值语句是进行对变量或对象属性赋值的语句,采用赋值号 =,如X=123:Form1.caption=”
我的窗口”
我的窗口”
对对象的赋值采用:set myobject=object 或 myobject:=object
对象可以用Set 设置为对象变量,如 Set MySheet = Workbooks(1).Sheets(1)
一般变量直接赋值即可,但如果变量是对象,则需要使用Set语句
Set的作用是设定变量的值
Set可以用来定义变量,也可以用来将变量设置为特定的值。此外,它还支持一些特殊关键字来定义变量的值。
Dim i As Integer '使用Dim语句定义变量
Set i = 10 '使用Set语句将变量i的值设置为10
使用End关键字结束Set语句,如 End Set
使用Set语句还可以将现有的变量设置为另一个变量的值。如:
Set a = b
另外,Set还支持一些特殊关键字,可以用来定义变量的值。
例如:可以使用ccur关键字来定义变量值为当前日期和时间,例如:
Set MyVariable = Ccur.
https://wenku.baidu.com/view/533c6bbb132de2bd960590c69ec3d5bbfd0ada31.html?_wkts_=1678439292893&bdQuery=vba+set+%E7%94%A8%E6%B3%95