1 数据类型目录
1 数据类型
2 变量的声明
3 变量的作用域和生存周期
4 把数据存储到变量里(赋值操作)
5 常量
6 变量作为过程或函数的参数
7 变量在公式中的使用
8 VBA中的数据结构
9 颜色属性的赋值
程序语言中定义的数据类型,包括定义可以取值的范围、需要的存储空间、以及可以进行的一些操作(可以使用的操作符)。
1.1 非对象变量
上面的基本数据类型,除Object、Variant外,都是非对象变量;
1.2 对象变量
对象变量也就是Object变量或特定的对象变量,如Border、CommandBar、Comment、Dialogs、Error、Filter、Font、Hyperlink、Icon、Name、Page、Pane、Parameter、PivotField、PivotFilter、PivotItems、Range、Shape、sheets、Smarttag、ThisWorkbook、Window、Workbook、Worksheet等。
对象变量保存着对象的引用指针。
1.3 枚举类型
当一个变量只有几种可能的值时,可以将其定义为枚举类型。枚举类型数据是将变量的所有可能值一一列举出来,属于该枚举类型的变量只能取枚举的某一个值。插入一个类模块,在其中输入:
Public Enum week
星期日
星期一
星期二
星期三
星期四
星期五
星期六
End Enum
在模块中使用枚举类型:
Sub useEnum()
Dim myWeek As week
myWeek = 星期二
Debug.Print (myWeek)
End Sub
运行后在立即窗口中显示数据:2
1.4 自定义数据类型
VBA中的自定义数据类型是一个多种数据类型的集合。
在普通模块的最前面输入:
Type student
name As String
id As Integer
age As Integer
End Type
使用自定义类型:
Sub useSelfType()
Dim stu As student
stu.name = "wwu"
stu.id = 2012
Debug.Print (stu.name)
End Sub
运行后在立即窗口中显示数据:wwu
2 变量的声明2.1 Dim 变量名 As 数据类型
2.2 Dim str As String*10 ‘定长类型,最多只能存储10个字符
2.3 Dim str$ ‘数据类型使用符号表示,$表示字符串类型
2.4 Dim var ‘未指定数据类型时,默认为Variant
2.5 同一条Dim语句声明多个变量时,使用逗号分隔;
2.6 变量不声明也是可以使用的,可以使用Option Explicit语句要求使用变量时强制要求先声明。
2.7 函数过程也可以声明数据类型:
[Public | Private][Static] Function 函数名([参数列表]) [As 数据类型]
2.8 对象变量的声明,如果对象变量只有在程序运行时才能知道引用的对象类型,则可以将对象类型声明为Object,如有以下三种定义对象的方式:
3 变量的作用域和生存周期Dim obj
Dim obj As Object
Dim obj As Range
3.1 变量的作用域
变量的作用域是指变量在程序中的可见范围。
在一个工作簿的工程中最可插入多个模块,一个模块可以包含多个多个过程。
3.1.1 单个过程
在一个过程中使用Dim或Static语句声明的变量,作用域为本过程,即只有声明变量的语句所在的过程可以使用它,这样的变量称为本地变量
3.1.2 单个模块
在模块的第一个过程之前使用Dim或Private语句声明的变量,作用域为声明变量的语句所在模块里的所有过程,即该模块里所有的过程都可以使用它。这样的变量称为模块级变量
3.1.2 所有模块
在模块的第一个过程之前使用Public语句声明的变量,作用域为全部模块,即全部模块里的过程都可以使用它。这样的变量称为公共变量
3.2 变量的生存周期
变量的生存周期是指变量能够在内存中保存的时间。如当程序进入变量所在的过程时为其分配内存单元,当退出该过程时,该变量占用的空间单元将被释放,其值也将消失。如果再次进入该过程,变量将会重新初始化。这样的变量称为动态变量,使用Dim语句声明的变量都属于动态变量。
如果在程序运行进入变量所在的过程后,即使退出了过程,该变量的值仍然被保留,也就是变量所占用的内存单元不释放。当再次进入该过程时,变量值能够再次被使用,这样的变量称为静态变量。静态变量使用Static关键字,如:
Sub useStaticVar()
Static sum As Double
sum = sum + 5
Debug.Print (sum)
End Sub
上面的过程运行4次后,立即窗口显示为:20
4 把数据存储到变量里(赋值操作)把数据存储到变量里,也就是给变量赋值。
4.1 非对象变量赋值
[Let] 非对象变量名 = 数据
数据如果是文本,需要使用双引用界定字符串,如果是日期,需要使用两个#来界定日期;
4.2 对象变量赋值
Set 对象变量名称 = 具体对象
4.2.1 对象变量.方法,形成一条单独的语句;
4.2.2 对象变量.属性,可以作为左值,也可以作为右值用在表达式中。如单元格的value属性(用在表达式中可以省略关键字value)、name属性(如工作簿、工作表都有name属性,Font也有name属性)。
“=”左边必须是常量名、变量名或对象属性名,不能是表达式;
“=”左边的变量的数据类型必须和右边表达式计算结果的数据类型兼容。或者数据类型相同,或者能够进行隐式的数据类型转换。
4.3 对象的逐层引用
活动工作表中的对象可以直接引用,也可以使用ActiveCell直接引用活动单元格。
Application→Workbook→Sheet(chart)→Worksheet→Range(shapes、Hyperlinks、Names)→Font(Border、Interior)
4.4 索引中使用变量
Integer变量可以用作工作簿、表的索引、Range对象的行索引、Cells对象的行、列索引、行或列的索引、数组的索引;
String变量可以用作Range对象的整体引用、Range对象的列索引、cells对象的列索引,字典的键(索引);
5 常量Range的列通常用字母来表示,但也可以通过下面的形式转换为数字来表示:
Range(Cells(1,1),Cells(10,5)).select
'等价于:Range(“A1:E10”)
常量通常用来存储一些固定的,不会被修改的值,如圆周率、个人所得税税率等。
可以理解为常量是只能取一个固定值的变量,枚举类型是指可以取若干可数的值的变量,而普通变量是可以取无限个值的变量。
常量一般是在声明时同时赋值。
同样的,常量与变量一样也有相同定义的作用域。
5.1 字面常量
5.1.1 字符常量
字符常量使用双引号界定,如果在字符串中包含有一个双引号,需要用两个双引号表表示一个双引号,如:
Sub charConst()
Dim s As String
s = "Henry say:""hi!"""
Debug.Print (s)
End Sub
上面过程运行后,立即窗口显示:Henry say:"hi!"
5.1.2 日期常量
日期常量使用两个#符号来界定,如:
Sub dateConst()
Dim d As Date
d = #2/29/2016#
Debug.Print (d)
End Sub
上面过程运行后,立即窗口显示:2016/2/29
其它的字面常量还有数值常量、布尔常量等。
5.2 符号常量
使用符号常量比直接使用字面常量更直观、更易于程序的修改维护、也更容易避免错误。
Const 常量名称 As 数据类型 = 数值
Const PI As Double = 3.14
5.3 系统常量
系统常量是VBA系统内部提供的一系列具有各种不同用途的符号常数。如用vbRed表示红色,比使用数值0xFF0000要直观易懂。
6 变量作为过程或函数的参数VBA过程和函数都可以使用参数。参数相当于一个接口中的选项,为用户提供自定义空间,从而提升其灵活性,同时简化代码。
参数可以用关键字Optional定义可选参数,可以使用关键字ParamArray定义不确定数量的参数。
过程和函数定义时使用的参数称为形参,形参相当于变量的声明,过程调用时,实参代替形参,相当于给形参赋值。
如:
Sub defPara(ByRef var As Integer)
var = var * 3
Debug.Print (var)
End Sub
过程调用:
Sub usePara()
Dim b As Integer
b = 4
Debug.Print (b)
Call defPara(b)
Debug.Print (b)
End Sub
运行usePara()后,立即窗口显示为:
4
12
12
参数中的ByRef表示按引用传递参数,另外一种参数传递的方式是ByVal,也就是按值传递。
6 变量在公式中的使用变量在公式中与字符串连接时使用&符号,如:
Range(col & lastR + 1).Formula = “=sum(“& col & “2:” & col & lastR & ”)”
7 VBA中的数据结构VBA中的数据结构主要有数组、字典、集合,这些数据结构的数据直接保存在内存(不同于工作簿中的数据是保存在外部存储器,数据处理时,需要由外部存储器输入到到内存中),直接用数据结构表示数据时,不需要额外的数据传输,有较高的数据处理效率。
数据结构与工作簿数据可以相互赋值操作:
变量 ↔ 单元格值(Range、Cells);
字符串变量↔工作簿名、工作表名、字体名;
数组 ↔ 单元格区域
字典↔多行二列区域
集合↔单行或单列
8 颜色属性的赋值数组的转置:WorksheetFunction.Transpose (arr)
[A1].Font.ColorIndex = 3
[A1].Interior.Color = RGB(255, 255, 0)
-End-
最新评论