【VB开源代码栏目提醒】:以下是网学会员为您推荐的VB开源代码-VBA程序设计基础 - 毕业设计,希望本篇文章对您学习有所帮助。
第八章 VBA 程序设计基础 第一讲 8-1
学习目标与要求 与传统的程序设计语言不同,VBA 应用程序由两个主要部分组成,即用户界面和程序
代码。
此外,VBA 是事件驱动型语言,
代码不是按预定的顺序执行,而是在响应不同的事件时执行不同的
代码。
1.掌握 VBA 程序语句的构成和书写方法。
2.掌握 VBA 应用程序的设计步骤。
3.掌握 VBA 应用程序的保存和装入方法。
4.了解 VBA 应用程序的结构和事件驱动机制。
8-2 内容要点8.2.1VBA 中的语句一、语句和语句行 VBA 中的语句是执行具体操作的指令,每个语句以回车键结束。
在一般情况下,输入程序时要求一行一句,一句一行。
但 VBA 允许使用复合语句行,即把几个语句放在一行中,各语句之间用冒号 )(: 隔开。
一个语句行的长度最多不能超过 1023 个字符。
在输入程序时,可以通过续行符把程序分别放在几行中。
VBA 中使用的续行符是下划线(_) 。
如果一个语句行的末尾是下划线,则下一行与该行属于同一个语句行。
二、几个简单语句 1.赋值语句 用赋值语句可以把指定的值赋给某个变量或某个带有属性的对象,其一般格式为: Let 目标操作符源操作符 赋值语句的功能是:把“源操作符”的值赋给“目标操作符” 。
其中“源操作符”可以是变量(简单变量或下标变量) 、表达式(数值表达式、字符串表达式或逻辑表达式) 、常量及带有属性的对象;而“目标操作符”指的是变量和带有属性的对象。
“”称为“赋值号”。
2.注释语句 注释语句用来对程序的操作进行说明。
VBA 中的注释是“Rem或一个撇号“’” ,一般格式为: Rem 注释内容 ‘注释内容 注释语句可以作为单独一个语句行, 也可以放在其他语句的后面。
当作为单独一个语句行时,既可以使用 Rem 关键字,也可以使用撇号;但是,如果注释语句位于其他语句的后面,则只能使用撇号,不能使用 Rem 关键字。
例如: A100 Rem 变量 A 赋值 将产生语法(编译)错误,必须写成: A100 ‘变量 A 赋值 8-2-2 编写简单 VBA 应用程序一、用 VBA 开发应用程序的步骤 在用 VBA 开发应用程序时,需要以下三步: 1.建立可视用户界面 用户界面由对象,即窗体和控件组成,所有的控件都放在窗体上,程序中的所有信息都要通过窗体显示出来,它是应用程序的最终用户界面。
程序运行后,将在屏幕上显示由窗体和控件组成的用户界面。
2.设置窗体和控件的属性 建立界面后,可以设置窗体和每个控件的属性。
建立界面和设置属性可以同时进行,也可以在所有的对象建立完之后再回过头来设置每个对象的属性。
建立用户界面和设置对象属性是设计应用程序时的重要一环。
在用 VBA 设计应用程序时,用户界面不是程序行,而是放在窗体中的若干个控件,这些控件和窗体均被称为对象。
因此,设计用户界面实际上是一个建立对象的过程。
为了使界面的
设计清晰而有条理,通常在设计前将界面中所需要的对象及其属性画成一个表,然后按照这个表来设计界面。
3.编写
代码 VBA 采用事件驱动编程机制,因此大部分程序都是针对窗体中各个控件所能支持的方法或事件编写的,这样的程序称为事件过程。
在多数情况下,特别是小型应用程序,所编写的程序通常都由事件过程组成,即针对控件或窗体的事件编写
代码。
事件驱动机制与传统的程序设计有着根本的区别。
VBA 的程序
代码是针对某个对象事件编写的,每个事件对应一个事件过程。
用鼠标单击(Click)或双击(DblClick)一个对象是经常用到的事件,可以针对这样的事件编写事件过程。
二、打开
代码命令 三、
代码编辑器 针对不同的
代码窗口,VBA 提供了不同的
代码编辑器,包括窗体
代码编辑器、标准模块
代码编辑器和类模块
代码编辑器。
其中标准模块
代码编辑器和类模块
代码编辑器是纯
代码编辑器,而窗体
代码编辑器则与窗体界面密切相关。
VBA 的窗体
代码编辑器是一个窗口,可以在此窗口内编写事件过程和通用过程。
它像一个高度专门化的字处理
软件,提供了许多便于编写 VBA
代码的功能,这些功能通过编辑器的选项来设置。
其中较为重要的有以下两个功能: 1自动列出成员:可以自动填充语句、属性和参数,即在输入
代码时,编辑器列出适当的选择、语句、函数原型或值。
2自动快速信息:可以自动显示语句和函数的语法。
输入合法的 VBA 语句或函数名之后,将在当前行的下面显示相应的语法,并用黑体字显示它的第一个参数。
8:2:3 程序的保存装入运行 一、保存程序 VBA 应用
程序由三种类型的模块组成,即窗体模块、标准模块和类模块. 二、装入(加载)程序 三、程序的运行 VBA 应用程序可以在两种模式下运行,一种是解释运行模式,一种是编译运行模式。
1.解释运行模式 当用解释运行模式执行一个 VBA 应用程序时,将关闭用于生成应用程序的窗体设计器窗口和工程管理器窗口, 接着显示应用程序中定义的第一个窗体, 然后解释程序逐行运行应用程序,同时打开立即窗口。
在解释运行中,解释器每读完一行
代码,就将其转换为机器
代码,然后执行这些命令。
机器
代码是微处理器能识别的数字序列。
在解释运行模式下,微处理器指令不被保存,执行一行
代码后,如果需要再次执行,则必须重新解释一次。
解释运行的好处是,在修改程序后,不必编译就可以立即执行;但是,由于每次执行前必须对每条语句进行解释,因而运行速度较慢。
2.编译运行模式 严格地说,编译运行模式是应用程序的一种运行模式,不是
VBA 的模式。
在编译一个程序时,VBA 读取程序中的每个语句,对这些语句进行解释,并转换成微处理器指令,然后把这些指令保存在可执行文件 .EXE) 中。
由于程序中的所有语句都己被解释并转换为微处理器指令,因此在执行程序时就不必解释一句执行一句了,运行速度也相应地提高了。
8.2.4
VB 应用程序的结构与
工作方式 一、
VB 应用程序的构成 VBA 应用程序通常由三类模块组成,即窗体模块、标准模块和类模块。
1.窗体模块 一个应用程序包含一个或多个窗体模块 .每个窗体模块分为两部分, 一部分是作为用户界面的窗体,另一部分是执行具体操作的
代码。
2.标准模块 标准模块(文件扩展名为.bas完全由
代码组成,在标准模块中,可以声明全局变量,也可以定义函数过程或子程序过程。
3.类模块 可以把类模块看做是没有物理表示的控件。
每个类模块定义了一个类,可以在窗体模块中定义类的对象,调用类模块中的过程。
二、事件躯动 事件是可以由窗体或控件识别的操作。
在响应事件时,事件驱动应用程序执行指定的
代码。
事件可以由用户操作触发,也可以由来自操作
系统或其他应用程序的消息触发,甚至由应用程序本身的消息触发。
VBA 的每个窗体和控件都有一个预定义的事件集,当其中的某个事件发生,并且在相关联的事件过程中存在
代码时,VBA 将执行这些
代码。
为了让窗体或控件响应某个事件,必须把
代码放入这个事件的事件过程之中。
第二讲VBA 应用程序包括两个主要部分,即用户界面和程序
代码。
其中用户界面由窗体和控件组成,而程序
代码则由基本的程序元素组成,包括数据类型、常量、变量、内部函数、运算符和表达式等,与传统的程序设计语言没有多大差别。
8-3 学习目标与要求1.了解 VBA 的基本数据类型和用户定义的数据类型。
2.掌握常量的分类和符号常量的定义方法。
3.掌握变量的命名规则、定义方法和作用域。
4.了解常用内部函数的功能,掌握部分常用内部函数的用法。
5.掌握算术运算符、关系运算符、逻辑运算符及其表达式的 功能和用法。
8.3.1 数据类型一、基本数据类型 VBA 提供的基本数据类型主要有字符串型数据和数值型数据,此外还提供了字节、货币、对象、日期、布尔和变体数据类型。
1.字符串(String) 字符串是一个字符序列,由 ASCII 字符组成,包括标准的 ASCII 字符和扩展 ASCII 字符及中文字符。
字符串是放在双引号内的若干个字符,其中长度为 0(即不含任何字符)的字符串称为空字符串。
Example: “Hello” “We are student” “VBA 6.0 程序设计“ “ “ Note:空字符串
VB 的字符串: 1) 变长字符串 Dim a As string 2) 定长字符串 Dim a as string5 2.数值 VBA 的数值型数据分为整型数和浮点数两类。
其中整型数又分为整数和长整数,浮点数分为单精度浮点数和双精度浮点数。
(1)整型数是不带小数点和指数符号的数,在机器内部以二进制补码形式表示。
2浮点数也称实型数或实数,是带有小数部分的数值。
它由三部分组成:符号、指数及尾数。
单精度浮点数和双精 (或“e”度浮点数的指数分别用“E” (或“d” )和“D” )来表示。
Example: 123.45E3123.45E3 123.45678D3 123.45678D3 123.45678 尾数,D3 E3指数 3.货币Currency 货币数据类型是为表示钱款而设计的该类型数据以 8 个字节(64 位)存储,精确至小数点后 4 位(小数点前有 15 ,在小数点后 4 位以后的数字将被舍去。
位) Example: 1234.8765 也称定点数椐类型 4.变体Variant 变体数据类型是一种可变的数据类型,可以表示任何值,包括数值、字符串、日期/时间等。
5.其他数据类型 (1)字节Byte。
实际上是一种数值类型,以 1 个字节的无符号二进制数存储,其取值范(0-255) (2)布尔型(Boolean)以两个字节存储,它只取两种值,即 True 或 False 3日期Date.存储为 IEEE(Institute of Electrical andElectronics Engineers) 64 位8 个字节浮点数值形式。
日期文字须以数字符号(#)括起来,例如,January 1,2001。
(4)对象Object 用来表示图形或 OLE 对象或其他对象,用 4 个字节存储。
(5)Decimal 数据类型。
存储为 96 位(12 个字节)无符号的整型形式,并除以一个 10 的幂数,称为变比因子。
在 Decimal 数据类型只能在变体类型VariantVisual Basic 6.0 中,中使用,也就是说,不能把一个变量声明为 Decimal 类型 二、用户定义的数据类型 在 VBA 中,用户定义的类型通过 Type 语句来定义,格式如下: Type 数据类型名 数据类型元素名 As 类型名 数据类型元素名 As 类型名 End Type 用户定义的数据类型也称记录类型,必须先定义后使用,而且只能在模块(包括标准模块和窗体模块)的声明部分定义。
如果在窗体模块中定义,必须在前面加上关键子”Private 8.3.2 常量和变童 一、常量 1.文字常量 文字常量也称字面量(Literal。
VBA 的文字常量分为两种,即字符串和数值。
字符串常量由字符组成,可以是除双引号和回车符之外的任何 ASCII 字符。
字符串常量分为两类,一类是定长字符串,其长度不能超过 65 535 个字符;另一类是变长字符串,其长度不能超过 2 31 (约 21 亿)个字符。
数值常量共有 4 种表示方式,即整型数、长整型数、货币型数和浮点数。
其中整型数和长整型数都有 3 种形式,即十进制、十六进制和八进制。
货币型常数的小数点位置是固定的,因此也称定点数。
浮点数也称实数,其小数点是“浮动”的,分为单精度浮点数和双精度浮点数。
浮点数由尾数、指数符号和指数三部分组成,其中尾数本身也是一个浮点 :指数是整数。
数。
指数符号为 E(单精度)或 D(双精度) 为了显式地指明常数的类型,可以在常数后面加上类型说明符,这些说明符分别为: %整型 &长整型 !单精度浮点数 #双精度浮点数 @货币型 $字符串型 字节、布尔、日期、对象及变体类型没有类型说明符。
2.符号常量 符号常量是有“名字”的常量,可以用这个名字代替数值或字符串。
符号常量用关键字 Const 定义,一般格式为: Const 常量名=表达式〔,常量名表达式〕… 二、变量 一个有名称的内存位置称为变量Variable)。
每个变量都有一个名字和相应的数据类型,通过名字来引用一个变量,而数据类型则决定了该变量的储存方式。
1.变量的命名规则 (1名字只能由字母、数字和下划线组成。
2名字的第一个字符必须是英文字母,最后一个字符可以是类型说明符。
3)名字的有效字符为 255 个。
4不能用 VBA 的保留字作变量名,但可以把保留字嵌入变量名中。
2.变量的定义 任何变量都属于一定的数据类型,包括基本数据类型和用户定义的数据类型。
在 VBA 中,可以用下面几种方式来规定一个变量的类型: 在定义变量时指定其类型 可以用下面的格式定义变量: Declare 变量名 As 类型 这里的“Declare”可以是 Dim Static Redim Public;As “类型”可以是基本数据类型或用户定义的类型。
是关键字; Example: Dim a As integer Static a As string Public a As long Note:1Dim ab As Integer 于 Dim a As Integerb As Integer 2Static 与 Dim 定义的变量区别. 3.记录类型变量 记录类型变量的定义与基本数据类型变量的定义没有什么区别,但必须用“变量.元素”的格式引用记录中的各个成员。
Example: Type reco Num1 As double Num2 As Integer Var1 As String8 End Type Static aa As reco aa.num1aa.num2aa.var1 8.3.4 变量的作用域 一、局部变量与全局变量 1.局部变量(过程变量) 在过程(事件过程或通用过程)内定义的变量叫做局部变量,其作用域是它所在的过程。
局部变量通
常用来存放中间结果或用作临时变量。
某一过程的执行只对该过程内的变量产生用,对其他过程中相同名字的局部变量没有任何影响。
局部变量通过 Dim 或 Static 关键字来定义。
2.模块变量(窗体变量和标准模块变量) 模块变量可以用于模块内的所有过程。
当同一模块内的不同过程使用相同的变量时,必须定义模块变量。
与局部变量不同,在使用模块变量前,必须先声明,也就是说,模块变量不能默认声明。
模块变量通过 Dim 或 Private 关键字来定义。
3.全局变量 全局变量可用于工程的每个模块、每个过程。
全局变量必须用 Public(或 Global)语句声明。
不能用 Dim 语句声明,更不能用 Private 语句声明;同时,全局变量只能在标准模块中声明,不能在过程或窗体模块中声明。
二、默认声明 对于局部变量来说,可以不用 Dim(或 Static)定义,而在需要时直接给出变量名。
VBA 把该变量指定为变体数据类型。
默认声明的变量不需要使用 Dim 语句,因而比较方便,并能节省
代码,但有可能带来麻烦,使程序出现无法预料的结果,而且较难查出错误。
此外,默认声明只用于局部变量。
8.3.4 常用内部函数 VBA 提供了大量的内部函数。
在这些函数中,有些是通用的,有些则与某种操作有关。
大体上可分为转换函数、数学函数、字符串函数、时间日期函数、随机数函数等五类,每个函数带有一个或几个自变量。
可以通过立即窗口试验每个函数的操作。
在立即窗口中Debug 可作为立即窗口的对象名可以输入命令,命令行解释程序对输入的命令进行解释,并立即响应,与 DOS 下命令行的执行情况类似。
可以通过执行“视图”菜单中的“立即窗口”命令或按 CtrlG 键来打开立即窗口。
内部函数的执行比较简单,即给出指定的自变量的值,函数将返回相应的值。
例如,对于内部函数 Hexx来说, ,函数就可以返回与该自变只要给定 x 的值(十进制整数)量等值的十六进制数,此外.利用内部函数,还可以实现一些特殊操作。
Examples: 1.保留指定的小数位 在实际应用中,经常会遇到要求对数值保留到小数点一位、两位或几位的情况,这可以通过取整函数 Int 来实现。
例如,为了使 105.678 保留两位小数,第三位小数四舍五入,可以用下面的表达式来实现: Int105.678*1000.5/100 该表达式的值为:105.68 保留 1 位、2 位或几位小数的一般格式为: Intxd0 .5/d 这里的 d 是需要乘和除的因子,它是 10 的幂,当 d 为 10100 1000…时,分别保留 1、2、3…位小数。
2.用 Chr函数输出汉字 Chr$函数用来把指定的 ASCII 值转换为相应的ASCII 字符。
在计算机信息处理中,汉字也有自己的编码,GB2312-80 就是汉字的标准编码。
当在计算机上用某种输入方法输入汉字时,使用的编码称为汉字的“外码”,必须把它们转换成汉字在计算机中的“内码”(即机内码)才能存储和输出。
在
计算机中,每个汉字都有一个机内码,通常用十六进制数表示, 只是 ASCII 它类似于西文字符的 ASCII 码,码是单字节,而汉字的机内码是双字节。
例如“微型计算机”这几个汉字的机内码为: 微 型 计 算 机 CEA2 DOCD BCC6 CBE3 BBFA 用 VBA 中的 Chr函数可以把机内码转换为相应的汉字。
例如: Chrhcea2 。
图 4-1 是在立即窗口中用 Chr函数进行 其结果为“微”转换的情况。
8.3.5 字符处理与字符串函数 一、VBA 的字符处理机制 VBA 采用了一种新的字符处理方式,即所谓的大字符编码方案。
这种
方案把西文字符和中文字符作为一个整体进行统一编码,每个字符均用两个字符进行编码,通常托这种 (统一编码方式)处理方案称为“UniCode 方式” 。
在这种机制下,一个英文字符或一个汉字都看做是一个字符,所占用的存储空间均为两个字节。
UniCode 方式实现了对中西文字符的统一编码,但给中西文混合字符串处理带来了麻烦。
为此,Microsoft 在新版本的 VBA 中新增加了一组字符串处理函数,以兼容原有的单字节处理方式(ANSI)。
这些新增加的函数与原有的字符串处理函数相对应,在原函数名的后面增加了 一个字母“B”,如 LenB LeftB RightB 等。
此外,为了实现 ANSI 与 UniCode 之间的转换,VisualBasic 提供了一个名为 StrConv 的转换函数。
二、字符串函数 VBA 提供了处理字符串的函数,用这些函数可实现字符串的截取、长度测试、大小写转换、字符匹配等操作。
Left(字符串,n 8.3.6 运算符与表达衣 一、算术运算符 算术运算符用来执行简单的算术运算。
VBA 提供了 、取负(一)9 个算术运算符,包括:指数() 、乘法(*)、浮点除法(/)、整数除法(\) 、加法(+) 、取模(Mod) 、减法(一)和连接(&)。
除取负(一)是单目运算符外, 。
其他均为双目运算符(需要两个运算量) 二、关系运算符与算术运算符 1.关系运算符 关系运算符也称比较运算符,用来对两个表达式的值进行比较,比较的结果是一个逻辑值,即真(True)或假 、 。
VBA 提供了 8 个关系运算符,包括:=(相等)False)<>或><(不相等)、<(小于)、>(大于)、<=(小 、>=(大于或等于)于或等于) 、Like(比较样式)、Is(比较对象变量)。
用关系运算符连接两个算术表达式所组成的式子叫做关系表达式。
关系表达式的结果是一个 Boolean 类型的值, ,即 True 和 False. VBA 把任何非 0 值都认为是“真’,但一般以-1 表示真,以 0 表示假。
2.逻辑运算符 逻辑运算符也称布尔运算符。
用逻辑运算符连接两个或多个关系式,组成一个 Boolean 表达式。
VB 有 6 种逻辑运算符:Not(非)、And(与)、Or(或)、Xor(异或)、Eqv 、imp(蕴含)(等价) 用逻辑运算符连接两个关系表达式或算术表达式所组成的式子叫做逻辑表达式。
逻辑表达式的结果是一个 Boolean类型的值,即 True 和 False 。
三、表达式的执行顺序 一个表达式可能含有多种运算,计算机按一定的顺序对表达式求值。
一般顺序如下: 1.首先进行函数运算 2.接着进行算术运算. 其次序为: 、 、 、浮点 (1)指数()(2)取负(一)(3)乘法(*) 、 、 、除法(/)(4)整数除法(\)(5)取模(Mod)(6)加 、减法(一)和(7)连接(&)法(+) 3.然后进行关系运算(、>、<、<>、<、 >) 4.最后进行逻辑运算 其次序为: (1) Not 2 And 3 Or 4Xor(5)Eqv(6)Imp