ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2489|回复: 1

VBA语言基础 1

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-7-8 14:20 | 显示全部楼层 |阅读模式
本帖最后由 竹笛 于 2013-7-8 14:25 编辑

1.1、数椐类型
VBA同其他的编程语言一样,都要对数据进行操作。为此.VBA支持多种数据类绝,为用户编程提供了方便。如图1所示,列出了 VBA程序中主要的数据类型,以及它们的存储要求和取值范围。

  
其中,Variant数据类型是所有没被显式声明为其他类型变量的数据类型。Variant是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据。Variant也可以包含Empty、Error、Nothing及Null等特殊值。通常,数值Variant数据保存为其Variant中原来的数据类型。可以用Variant数据类型来替换任何数据类型,这样会更有适应性。Empty值用来标记尚未初始化的Variant变量。内含Empty值的Variant,在数值的上下文中表示0,如果是用在字符串的上下文中则表示零长度的字符串。Null是表示Variant变童含有一个无效数据。在Variant中,Error是用来指示在过程中出现错误时的特殊值。这可以让程序员,或应用程序本身,根据此错误值采取另外的行动。
与其他的语言类似,VBA可以自定义数据类型,使用Type语句就可以实现这个功能。用户自定义类型可包含一个或多个某种数据类型的数据元素、数组或一个先前定义的用户自定义类型。TVpe语句的语法为:
Type TypeName
  定义语句
end type
例如下面的Type语句,定义了 MyType数据类型,它由MyFirstName、MyLastName、
MyBirthDate 和 MySex 组成。
    Type MyType
         MyFirstName As String '定义字符串变量存储一个名字
        MyLastName As String '定义字符串变量存储姓
        MyBirthDate As Date '定义日期变量存储一个生日
        MySex As Integer '定义整型变量存储性别
     end Type
1.2 变量、常量、数组和表达式
VBA代码中声明和使用指定的常量或变量来临时存储数值、计算结果或操作数据库中的任意对象。
1.变置的声明
声明变量有两个作用,一是指定变量的数据类型,二是指定变量的适用范围。VBA应用程序并不要求在过程中使用变量之前明确地进行声明。如果使用一个没有明确声明的变量,Visual Basic会将它默认为Variant数据类型。
虽然默认的声明很方便,但可能会在程序代码中导致严重的错误。因此在使用前,声明变量是一个很好的编程习惯。VBA中可以强制要求在过程中使用变量前必须进行声明,方法是在模块通用节中包含一个Option Explicit语句。它要求在模块级别中强制对棋块中的所有变量进行显式声明。
使用Dim语句来声明变量,该语句的功能是:声明变量并为其分配存储空间。Dim语句的语法如下:
Dim Variable_Name As DataType
其中,变量名称可以像命名字段名一样,但是变量名不能包括空格键或其他字符(除了下划线另外,变量不能使用VBA关键字作名字,因为关键字也称为保留字。例如下面声明了字符串变量MyName。
Dim MyName As String
声明之后,就可以通过表达式给它賦值。可以在同一行内声明多个变量。例如:
Dim Varl,Var2 As Integer, Var3 As String
其中Varl的类型为Variant,因为声明时没有指定它的类型。在变量声明时,对于用户自定义的数据类型与常规的数据类型没有区别,只要在使用之前定义了该数据类型即可。
2.常量的声明
常量可以看作是一种特殊的变量,它的值经设置后就不能够更改或赋予新值。对于程序中经常出现的常数值,以及难以记忆且无明确意义的数值。使用声明常量可使代码更容读取与维护。使用Const语句来声明常数并设置其值,Const语句的语法为:
Const Const_name=expression
例如,下面的语句声明了一个常数PI。
Const PI=2.1415926
同样,可以在同一行里声明多个常量。
3.变量和常量的作用域
变量和常量的作用域决定变量在VBA代码中的作用范围。变量在第一次声明时开始有效,用户可以指定变量在其有效范围内反复出现。一个变量有效,被称为是可见的,意味着可为其陚值,并可在表达式中使用它。否则变量是不可见的。当变量不可见时使用这个变量,实际是创建一个同名的新变量。对于常量也是一样的。
可以在声明变量和常童的时候,对它的作用域作相应的声明,如果希望一个变量能被数据库中所有过程访问,需要在声明时加上Public关键字。可以用Private语句显式地将一个变量的适用范围声明为在模块内,但这不是必须的,因为Dim和Static所声明的变量默认为在模块内私有。下面的语句使用Public关键字声明Varl可以在整个程序中引用,而第2句所声明的变量Var2只能被变量所在的模块使用。对于常量情况是完全一样的。
Public Dim Varl As String
Dim Var2 As String
4.静态变量和非静态变量
使用Dim语句声明的变量,在过程结束之前一直保存着它的值,但如果在过程之间调用时就会丢失数据,这种变量称为非静态变量,与之对应的是静态变量。可以使用Static语句声明静态变量,使用Static声明的变童在模块内一直保留其值,直到模块被复位或重新启动。即便是在非静态过程中,用Static语句来显式声明只在过程中可见的变量,其存活期也与定义了该过程的祺块的存活期一样长。
Static语句的语法与Dim语句的语法相同,只是将Dim关键字换为Static而已。下面的语句声明了一个静态变量MySex。
Static MySex As Boolean
淸除过程中的静态变量的方法是:选择“运行”菜单的“重新设置”命令。也可以用Static关键字来声明函数和子程序,以便在模块的生存期内保留函数和子程序内的所有局部变量。
5.数组
可以用一个数组来表示一组具有相同数据类型的值。数组是单一类型的变量,可以存储很多值,而常规的变量只能存储一个值。定义了数组之后,可以引用整个数组,也可以只引用数组的个别元素。
数组的声明方式和其他的变量是一样的,它可以使用Dim、Static、Private或Public语句来声明。标量变量(非数组)与数组变量的不同之外就在于,通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。数组是否从0或丨开始索引要根据Option Base语句的设置,如果OptionBase语句没有指定为1,则数组索引从0开始,也可以使用To子句进行设定。若声明为动态数组,则可以在执行代码时改变数组的大小。可以利用Static、Dim、Private或Public语句来声明数组,并使括号内为空。
下面的语句声明了 3个数组,其中Arrayl是大小为11的数组,Anay2是一个10X20
的二维数组,而Array3则是动态数组。
Dim Arrayl(10) As String
Dim Array2(1 To 10, 1 To 20) As String
Dim Array3() As String
在使用数组变量的某个值时,只需引用该数组名并在其后的括号中陚予相应的索引即可。
6.表达式
表达式用来求取一定运算结果,由变量、常量、函数、运算符和圆括号构成,VBA中的表达式包含丰富的运算符,有算术运算符、比较运算符、逻辑运算符和连接运算符,这些运算符可以完成各种运算。具体每个运算符的功能和用法这里就不作详细介绍了。

  表达式就是由各种运算符将变量、常量和函数连接起来构成的。但是,在表达式的书写过程中要注意运算符不能相邻,乘号不能省略,括号必须成对出现。对于包含多种运算符的表达式在计算时,将按预定顺序计算每一部分,这个顺序被称为运算符优先级。各种运算符的优先级顺序为从函数运算符、算术运算符、连接运算符、比较运算符到逻辑运算符逐渐降低。如果在运算表达式中出现了括号,则先执行括号内的运算,在括号内部仍按运算符的优先顺序计算。

TA的精华主题

TA的得分主题

发表于 2013-7-9 22:16 | 显示全部楼层
谢哥    {:soso_e163:}
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 18:57 , Processed in 0.026658 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表