1 为什么要声明变量

1.1代码的三个组成部分

  • 程序就是处理数据的自动化语言
  • 每段代码都是由3个部分组成:I 输入数据,处理数据,O 输出数据(返回结果)。 

 

  • I/O
  • 输入数据:声明(定义)数据,赋初值---声明变量的数据类型,赋初值等就是第一部分,定义和输入数据!
  • 处理数据
  • 输出数据(返回结果)

 

1.2 常量和变量严格声明

  • 默认是不强制声明
  • 在模块的开头写上 option explict 会要求强制给每个变量声明!

 

  • 注意点:(只在本模块生效,写在本模块开头!)
  • Option Explicit必须写在模块开头,所有过程之前(所有sub之前);
  • Option Explicit的作用域是本模块,如果要限制多个模块,每个模块都需要写入;
  • Option Explicit可以通过在工具栏的选项卡中进行勾选设置。

工具里也可以设置,必须要求变量声明

vba没有返回值的function vba返回数据类型_数据

 

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 枚举型

vba没有返回值的function vba返回数据类型_赋值_02

 

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;