您的位置:首页 > 编程语言 > VB

学习Excel VBA(一)——VBA理论初步

2020-02-16 19:04 411 查看

学习Excel VBA(一)——VBA理论初步

  • 二、Excel VBA中的变量和常量
  • 2.变量的作用域
  • 3.静态变量(类似于C语言的static)
  • 4.常量
  • 三、Excel VBA中的运算符
  • 四、Excel VBA的数组
  • 2.二维数组
  • 3.动态数组
  • 一、Excel VBA的数据类型

    1.基本数据类型

    • 字符串(String);
    • 整型(Integer),16位 ;
    • 长整型(Long),32位;
    • 单精度浮点型(Single,注意不是Float),32位浮点数;
    • 双精度浮点型(Double),64位浮点数;
    • 货币型(Currency),64位,其中包含四位小数
    • 日期型(Date),64位,可表示时间从100年1月1日到9999年12月31日,时刻从0:0:00到23:59:59
    • 变体型(Variant),可自动根据存入的数据类型进行转换,在VBA中未经声明的变量都会被转化为变体,但占用存储空间大,因此不建议使用
    • 布尔型(Boolean),值只有True和False。当其他类型转化为布尔型时,0为False,非0位True;当布尔型转化为其他类型时,False转化为0,True转化为 -1注意不是转化为1);
    • 字节型(Byte),8位保存0~255的整数;
    • 对象型(Object),32位地址,可以表示应用程序中的对象,可用Set语句来将声明为对象型的变量赋值为任何对象的引用。

    2.枚举类型(类似于C语言的enum)

    声明语法

    Enum 枚举类型名
    枚举变量1
    枚举变量2
    枚举变量3
    ...
    End Enum

    枚举变量的默认值:第一个0,后面的自增1。如需修改起始值,给起始变量赋值即可。
    声明实例——声明一个Week的枚举类型

    Public Enum week
    Sun
    Mon
    Tue
    Wed
    Thu
    Fri
    Sat
    End Enum

    对于上面的实例,若将起始值改为1,只需修改为

    Sun=1

    即可。由下图可见,枚举类型变量只能从枚举值中选取值。

    3.自定义类型(类似于C语言的typedef struct)

    声明语法

    Type 数据类型名
    元素1名 As 数据类型
    元素2名 As 数据类型
    元素3名 As 数据类型
    ...
    End Type

    其中的“数据类型”既可以是基本数据类型,也可以是已定义的自定义数据类型。
    声明实例——声明一个myType类型

    Type myType
    4000
    
    myName As String
    myID As Number
    myBir As Date
    End Type

    二、Excel VBA中的变量和常量

    1.变量的声明

    变量名的要求

    可以参考C语言的变量名要求。注意:中文版的Excel支持中文作为变量名

    变量的声明语句

    声明语法

    Dim 变量名 [As 数据类型]

    声明实例

    /*声明一个String类型的变量myString*/
    Dim myString As String
    /*声明多个Integer变量*/
    Dim intA As Integer,intB As Integer,intC As Integer
    /*注意比较上一条*/
    Dim intA,intB,intC As Integer
    /*上面声明的结果是:只有intC是Integer型,intA,intB将是Variant型*/

    使用强制变量声明

    VBA其实可以像MATLAB一样,直接使用变量从而创建变量(即所谓隐式声明),其类型也将是Variant。虽然看似方便,但有两个不可回避的缺点

    • 如前面所说,Variant数据类型占用内存大,影响运行效果
    • (这一点个人认为更为致命)如果出现变量名拼写错误,VBA将认为拼错的变量名是一个隐式声明的变量,从而不会报错。这样会增大调试的难度。

    因此VBA提供了强制声明的选项,也建议大家使用。具体操作有两种:

    1. 在每一个模块编写前加入
      Option Explicit
      语句(较为繁琐)
    2. 在“工具”→“选项”内勾选“要求变量声明”(如下图)

      每次创建模块时,都会自动在模块第一行添加
      Option Explicit

    2.变量的作用域

    • 过程级变量——类似于“局部变量”,仅在该过程内可以被访问
    • 模块级变量——可被多个过程所访问的变量
    • 工程级变量——类似于“全局变量”,在整个工程内的所有过程都可以访问
      作用域取决于Dim语句的位置。
      与C语言类似,尽量多的使用过程级变量,共享时使用模块级变量,尽量少的使用工程级变量。

    3.静态变量(类似于C语言的static)

    静态变量的生存期是直到该Excel工作簿被关闭后才结束的。
    声明语法

    Static 变量名 As 变量类型

    声明实例

    Option Explicit
    Sub staticvar()
    Static num1 As Integer
    num1 = num1 + 5
    Debug.Print num1
    End Sub
    Sub dynamicvar()
    Dim num2 As Integer
    num2 = num2 + 5
    Debug.Print num2
    End Sub

    分别多次执行第一个和第二个过程,结果如下图:


    可以看到静态变量和动态变量在执行的过程中值的变化情况的不同。

    4.常量

    直接常量

    • 数值常量:整数、小数、十六进制、八进制、正负等
    • 字符常量(字符串):由双引号定界。对于包含双引号的常量,则需要在有双引号的地方输入两次双引号。
    • 日期/时间常量:以#作为定界符,需要注意时间/日期的合法性
    • 布尔常量:只有两种值True和False

    符号常量(类似于C语言的const)

    声明语法

    [Public|Private] Const 常量名1 [As 数据类型1]=常数表达式1,常量名2 [As 数据类型2]=常数表达式2,常量名3 [As 数据类型3]=常数表达式3...

    默认的是Private

    系统常量

    即特别定义了一些符号常数,能够比使用常数有着更好的效果。比如色彩常数中vbRed代表红色,这显然比0xFF0000要好用的多。
    查看Excel VBA的系统常量,可以在“视图”→“对象浏览器”中搜索查看。如下图所示

    三、Excel VBA中的运算符

    1.算术运算符

    加(+),减(-),乘(*),除(/),整数除法(\,结果只保留整数部分),幂(^),模(Mod)

    2.比较运算符

    比较运算符的计算结果只有True和False
    小于(<),小于等于(<=),大于(>),大于等于(>=),不等于(<>,注意不是!=),等于(=,注意不是==)
    数学表达式的比较遵循数学运算规律
    字符串之间的大小比较参考C语言的strcmp
    Like:类似于SQL语句中的like,进行字符串的模糊匹配
    Is:用于对象引用之间的比较

    3.逻辑运算符

    逻辑运算的结果也只有True和False

    • Not:逻辑否
    • And:逻辑与
    • Or:逻辑或
    • Xor:逻辑异或
    • Eqv:逻辑等价
    • Imp:逻辑蕴含

    4.合并字符串的连接运算符——“&”和“+”

    “&”用来强制将两个表达式作为字符串连接起来
    “+”只能在其两端为字符串是可以进行连接操作,否则会提示“类型不匹配”

    5.运算优先级

    先算数,再比较,最后逻辑。

    四、Excel VBA的数组

    1.一维数组

    声明语法1

    Dim 数组名 (上界) As 数据类型
    /*例如*/
    Dim myStrings  (15) As String

    这里声明的数组myStrings,数组中的元素是从myStrings(0)开始,到 myStrings(15)结束,共16个元素。请与C语言中数组的相关内容区分!!

    声明语法2

    Dim 数组名 (下界 To 上界) As 数据类型
    /*例如*/
    Dim myArray (-2To8) As String

    这里声明的数组myArray,数组中的元素是:myArray(-2),…,myArray(0),…,
    myArray(8),共11个元素。

    2.二维数组

    /*声明语法1*/
    Dim 数组名(第一维上界,第二维上界) As 数据类型
    /*声明语法2*/
    Dim 数组名 (第一维下界 To 第一维上界,第二维下界 To 第二维上界) As 数据类型

    3.动态数组

    与C语言类似,Excel VBA静态数组的下标也只能是常量,而不能是表达式或者变量。
    动态数组的声明过程:

    1. 使用Dim声明一个数组,但不要写数组下标,如
    Dim myArray () As Integer
    1. 创建后,使用ReDim语句再次对该数组进行声明,重新分配内存空间。
      ReDim语句的语法格式是:
    ReDim [Preserve] 数组名 (下标) [As 数据类型]

    其中,保留字Preserve的作用是:如果使用,则在扩充数组时保留原有数据中的数据。
    注意:对于多维数组,由于Excel VBA的数组也是列分割,所以只能ReDim最后一维。

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    子非木鱼 发布了2 篇原创文章 · 获赞 0 · 访问量 91 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: