【原创】VBA学习笔记(11)VBA的数据类型

  • Post author:
  • Post category:其他


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;

参考文献和继续


http://www.cnblogs.com/wuzhiblog/p/vba_one.html


https://blog.csdn.net/bangemantou/article/details/70183048



版权声明:本文为xuemanqianshan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。