




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、10101 1模块的基本知识模块的基本知识 模块是Access 2003对象之一,起着存放用户为实现某种操作而编写的VBA代码的作用,模块中的每一个过程都可以是一个子程序或一个函数过程。其中子程序又称为Sub过程,它完成某一特定的操作,没有返回值,通常以Sub开始, End Sub结束。函数过程又称为Function过程,是一种能返回具体值的过程,通常以Function,并以End Function语句结束。 第1页/共85页10101 11 1模块的分类模块的分类 在Access 2003中,有类模块和标准模块两种。1 1类模块类模块 类模块是指包含新对象定义的模块,用户每创建一个新对象,就
2、会新建一个类模块。窗体模块和报表模块都是类模块,它们各自与某一窗体或报表相联。窗体和报表模块通常都有含有事件过程,该过程用于响应窗体或报表中的事件。可以使用事件过程来控制窗体或报表的行为,以及它们对用户操作的响应。例如:用鼠标单击某个命令按钮。2 2标准模块标准模块 标准模块是指存放在整个数据库中可用的函数和子程序的模块。标准模块包括通用过程和常用过程。通用过程不与任何对象相关联,常用过程可在数据库的任何位置运行。 第2页/共85页10101 12 Microsoft Visual Basic2 Microsoft Visual Basic编辑编辑器器 Microsoft Visual Bas
3、ic编辑器是用于创建模块的一个开发工具。1 1打开打开Microsoft Visual BasicMicrosoft Visual Basic编辑器编辑器 启动Microsoft Visual Basic编辑器的方法主要有以下几种。 (1)在数据库窗口中,单击“工具”菜单的“宏”命令,然后在“宏”子菜单中单击“Visual Basic编辑”命令。 (2)在数据库窗口中单击“模块”对象,然后单击工具栏的“新建”按钮。 (3)单击“插入”菜单中的“模块”命令。 (4)在窗体或报表的设计视图中单击工具栏中的“代码”按钮。 启动后的Microsoft Visual Basic编辑器窗口如图10-1所示
4、。 第3页/共85页图10-1 Microsoft Visual Basic编辑器窗口第4页/共85页 在图10-1窗口中,分为左右两部分,其中左边部分是“工程资源管理器”,当前数据库中的所有模块及Access 2003类对象都列在该窗口中,用户可在窗口中选择各种模块或对象,只要双击某模块的名字,就能打开或查看其代码。窗口的右边是代码窗口,它用来显示当前选定过程的代码,也可在该窗口中输入当前选定过程的代码。 第5页/共85页10102VBA2VBA程序设计基础程序设计基础 一个好的数据库应用系统离不开模块,而要设计一个好的模块,更离不开VBA程序设计。因此,我们必须掌握VBA程序设计基本知识,
5、才能设计出一个理想的数据库应用系统。 10102 21 1程序书写的格式程序书写的格式1注释语句 注释是对程序的说明,有时也利用注释语句屏蔽一条语句以观察变化、发现问题和错误。Visual Basic中的注释语句有两个,分别是Rem和撇号“”,Rem通常放在某程序或程序段的首行,对整个程序或程序段的功能作说明,“”通常放在某语句行的后面,对所在行的功能作说明。其格式如下: 第6页/共85页 Rem 注释内容 或 注释内容 说明:说明: (1)在Rem关键字与注释内容之间要加一个空格。例如:Rem 这是一个标题 这是一个标题 (2)任何字符都可以放在注释行中作为注释内容。注释语句通常放在过程、模
6、块的开头作为标题,也可以放在执行语句的后面。在这种情况下,注释语句必须是最后一个语句,且Rem前必须用冒号(:)与语句隔开。但若用撇号,则在其他语句后不必加冒号。例如:第7页/共85页Text1.text=Good morning! This is a testText1.text=Good morning! :Rem This is a test (3)注释语句不能放在续行符的后面。 2 2连写和换行连写和换行 (1)连写 在VBA中,通常一行书写一个VBA语句,也可以在一行书写多个VBA语句,这时需要用“:”将几个VBA语句分隔。 如:Dim No As Integer Dim Name
7、As String可写成下面一行 Dim No As Integer :Dim Name As String (2)换行 有时代码太长,书写起来很不方便,这时可将其分成多行书写,但必须在行尾加上“ ”。第8页/共85页10102 22VBA2VBA中的数据类型中的数据类型 数据是指能够输入到计算机中,并能被计算机识别和加工处理的符号的集合。数值、字符、图形、图像和声音等都是数据。数据是计算机程序处理的对象,也是运算产生的结果。计算机处理的数据必须是有组织的,并按一定结构进行存储的数据。因此,计算机中的数据都有自己的数据类型。不同类型的数据其取值范围、所适应的运算都不相同,在内存中所分配的存储单
8、元数目也不同,因此,正确区分和使用不同的数据类型,可使程序在运行时占用较少的内存,确保程序运行的正确性和可靠性。VBA的标准数据类型有11种,如表10-1所示。 第9页/共85页表表10-1 VBA变量的标准数据类型变量的标准数据类型数据类型数据类型关键字关键字说明符说明符数据范围数据范围所占字节数所占字节数整型整型IntegerInteger% %-32768-3276832767327672 2长整型长整型LongLong& &-2147483648-2147483648214748364721474836474 4单精度型单精度型SingleSingle! !1.401298E-451.
9、401298E-453.402823E383.402823E38-1.79769313486232E308-1.79769313486232E308- -4.9406564584124E3244.9406564584124E3244 4双精度型双精度型DoubleDouble# #4.9406564584124E3244.9406564584124E3241.79769313486232E3081.79769313486232E3088 8货币型货币型CurrencyCurrency -922337203685477.5808-922337203685477.580892 337203 92
10、337203 685477.5807685477.58078 8字符型字符型StringString$ $与字符长度有关与字符长度有关字节型字节型ByteByte无无0 02552551 1布尔型布尔型BooleanBoolean无无TrueTrue、FalseFalse2 2日期型日期型DateDate无无100100年年1 1月月1 1日日99999999年年1212月月3131日日8 8对象型对象型ObjectObject无无任何任何ObjectObject4 4变体型变体型VariantVariant无无根据需要分配根据需要分配第10页/共85页1 1数值型数据数值型数据 VBA的数值
11、型(Numeric)数据主要分为整型和浮点型(实型),另外还有货币型和字节型。其中整型可分为整型和长整型,浮点型可分为单精度和双精度浮点型。2 2字符型数据字符型数据 字符型数据是一组由计算机字符组成的序列,即字符串,每个字符都以ASCII编码表示,即用一个字节表示。在VBA中,字符串要用双引号括起来,其中长度为0的字符串称为空字符串。字符型的类型说明符为“$”。 第11页/共85页 VBA有两种类型的字符串:变长字符串和定长字符串。变长字符串是指字符的长度是不固定的,随着对字符串变量赋予新的字符串,它的长度可随时变化,最大长度为251-1个字符,如果没有说明一个字符是哪种类型,默认为变长字符
12、串。 定长字符串是指它在程序执行过程中,始终保持其长度不变的字符串,定长字符串的最大长度为65535个字符。例如,可规定学生学号的长度为8位,如果不足8位则用空格将不足的部分填满,如果长度超过8位则截去超出部分的字符。 第12页/共85页3 3布尔型(布尔型(BooleanBoolean)数据)数据 布尔型数据是一个逻辑值,用两个字节存储,它有两种取值,即True(真)或False(假)。任何只有两种状态的数据,如True/False、Yes/No、On/Off等,都可以表示为布尔型。当把数值型转换为布尔型时,0会转换为False,其他非0值转换为True;当把布尔值转换为数值型时,False
13、转换为0,True转换为1。 4 4日期型(日期型(DateDate)数据)数据 日期型数据用来表示日期和时间,可以表示多种格式的日期和时间。日期型数据用两个“#”符号把表示日期和时间的值括起来,就像字符串数据用双引号括起来一样。例如,#10/28/2001#、#10-28-2001#、#10/28/2001 10:46:01 pm#等。 第13页/共85页5 5对象型(对象型(ObjectObject)数据)数据 Object变量可用来引用应用程序中或某些其他应用程序中的对象。然后用Set语句指定一个被声明为Object的变量去引用应用程序所识别的任何实际对象。例如:Dim ObjDb As
14、 ObjectDim ObjDb As ObjectSet ObjDb=OpenDatabase(C:Vb6student.mdb)Set ObjDb=OpenDatabase(C:Vb6student.mdb)6 6变体型(变体型(VariantVariant)数据)数据 变体型数据是一种可变的数据类型,可以表示任何值,包括数值、字符串、日期等。变体型数据表示数值型数据时,占用16个字节的存储空间,最大可达Double类型的取值范围。表示字符串时,则占用的存储空间等于字符串的长度。 第14页/共85页7 7自定义数据类型自定义数据类型 在VBA语言中,用户自定义的数据类型通过Type语句来实
15、现。其格式如下: Type 数据类型名 数据类型 元素名 As 类型名 数据类型 元素名 As 类型名 数据类型 元素名 As 类型名 End Type第15页/共85页10102 23 3常量常量 常量是指在整个程序运行期间其值不会发生变化的量。VBA的常量包括数值常量、字符常量、符号常量、固有常量和系统定义常量5种。其中数值常量和字符常量最常用。数值常量由数字组成,表示具体的数值,如23876。字符常量由定界(引号)将字符括起来,如abc。下面介绍其他3种常量。 1 1符号常量符号常量 对于一个具有特定意义的数字或字符串,或在程序中需要反复使用的相同值,可以用符号常量来代表。一般用Cons
16、t语句来说明符号常量,例如:Const cpi=3.1415 第16页/共85页2.2.固有常量固有常量 固有常量是Access 2003或VBA的一部分,是在Access或VBA的类库中定义的。Access或VBA包含了许多预定义的固有常量。固有常量使用两个字母的前缀,表示该常量所在的对象库。来自VB的固有常量以“VB”开头,来自Access的固有常量以“AC”开头,而来自ADO(ActiveX Data Objects)库的常量以“AD”开头。所有的固有常量都包含在类型库中,只有在模块引用了常量,被引用的常量才能装到内存中。要查看这些常量可以使用Access中的对象浏览器。例如:acfor
17、m, adAddNew, vbCurrency。第17页/共85页10102 24 4 变量变量 在程序中处理数据时,对于输入的数据、参加运算的数据、运行结果等临时数据,通常将它暂时存储在计算机的内存中。在VBA中,可以用名称表示内存位置,这样就能访问内存中的数据。一个有名称的内存位置称为变量(Variable)。和其他语言一样,VBA也用变量存储数据值。每个变量都有一个名称和相应的数据类型,通过名称来引用一个变量。数据类型决定了该变量的存储方式。第18页/共85页1 1变量的命名规则变量的命名规则 变量代表在程序执行过程中其值可以改变的存储单元,这个存储单元的名称称为变量名。VBA变量名的命
18、名规则如下: (1)以字母或汉字开头,后可跟字母、数字或下画线,长度小于等于255个字符。 (2)不能使用VBA中的关键字。 (3)VBA语言中不区分变量名的大小写。 (4)为了增加程序的可读性,可在变量名前加一个缩写的前缀来表明该变量的数据类型。如strAbc(字符串变量)、iCount(整型变量)、dblx(双精度变量)等。第19页/共85页2 2变量的声明变量的声明 任何变量都属于一定的数据类型,包括基本数据类型和用户自定义的数据类型。声明变量就是用一个语句来定义变量的类型。声明变量的语句并不把值分配给变量,而是告知变量将包含什么类型的数据,在VBA中声明变量分为显式声明(先声明,后使用
19、)和隐式声明(不声明变量而直接使用)两种。声明变量的一般格式如下:Dim|Static|Private|Public As ,As . 其中,应遵循标准的变量命名约定,As是关键字,用来定义被声明变量的数据类型或对象类型。 Dim、Static定义过程级的变量,变量只有在声明它们的过程中才能被识别,所以称之为局部变量。第20页/共85页例如:例如:Dim Count As Single 定义Count为单精度浮点数Static PutIn As String 定义PutIn为字符串型变量Dim Var 定义Var为缺省的Variant 类型 Private定义私有模块级变量,变量对该模块的所有
20、过程都可用,但对其他模块的代码不可用。例如:Private Intvalue As IntegerPublic主要在全局模块中使用,定义的变量是全局变量,作用范围为整个应用程序。例如:Public PI As SinglePublic AA As Integer第21页/共85页10.2.510.2.5运算符和表达式运算符和表达式 常量、变量及它们的数据类型是程序要进行加工和处理的运算对象,即数据,而要对这些数据进行加工、处理和运算,还必须使用运算符,以表明对数据实施的是何种操作。VBA的运算符有算术运算符、连接运算符、关系运算符和逻辑运算符。用运算符号将常量、变量或函数连接起来的有意义的式子
21、称为表达式,表达式按其所含运算符和运算对象的不同,可分为算术表达式、关系表达式、逻辑表达式和字符串表达式等。1 1运算符运算符(1)算术运算符算术运算符用来对数值型数据执行简单的算术运算。在VBA中共有8种算术运算符,如表10-2所示。 第22页/共85页表10-2 算术运算符运算符运算符含义含义表达式举例表达式举例说说 明明优优 先先 级级举举 例例结结 果果指数指数4364进行乘方运算,进行乘方运算,43是是431-取负取负- -10- -10进行单目运算,进行单目运算,10取负取负2*乘乘8*2163除除7/23.53整除整除723整除结果取商的整数部分整除结果取商的整数部分4Mod求余
22、求余7 Mod 21结果是两个数相除后之余结果是两个数相除后之余5+加加10+212“+”也可以是字符串连接符也可以是字符串连接符6-减减7.4- -34.46第23页/共85页说明:说明: 算术运算符中,除负号“-”是单目运算符外,其余都是双目运算符(要求有两个运算量)。 “+”、“-”、“*”的概念和数学中的概念相同。 除法运算有两种。 “/”一般除法,运算结果一般为单精度数。如果操作数有一个为双精度数,则结果为双精度数。如7/3=2.333 333 333 33。 “”整除,整数除法,结果为整数。如73=2。 Mod运算符是求两数相除后的余数。例如:22 Mod 7 结果为18.6 Mo
23、d 3 结果为011.4 Mod 5.2 结果为1第24页/共85页 参加整除和求余运算的运算对象一般为整型值,当运算对象中含有小数点时, Visual Basic会自动将操作数四舍五入为整型或长整型后再进行运算。例如,表达式52 Mod 526.45的结果为1。 (2) (2)字符串运算符字符串运算符 将两个或多个字符串连接起来可以用字符串连接运算符“&”或“+”,生成一个新的字符串。例如: “ABCD”+“EFGHI” 结果为: ABCDEFGHI “Visual Basic” & “程序设计教程” 结果为: Visual Basic程序设计教程 说明:说明:当连接符两旁的操作量都为字符串
24、时,上述两个连接符等价。区别是:“+” 运算中两个操作数均应为字符串类型。&运算的两个操作数既可为字符型也可为数值型,当是数值型时,系统自动先将其转换为数字字符,然后进行连接操作。看下面的例子。第25页/共85页100+123 结果为223100+23 结果为100123Abc+122 出错100 & 123 结果为100123100 & 123 结果为100123Abc & 123 结果为Abcl23Abc & 123 结果为Abcl23(3)(3)关系运算符关系运算符 关系运算符都是双目运算,是用来比较两个运算量之间的关系,关系表达式的运算结果为逻辑量。若关系成立,结果为True;若关系不
25、成立,结果为False。VBA提供的关系运算符如表10-3所示。 第26页/共85页表10-3 关系运算符运算运算符符含含 义义表达式举例表达式举例说说 明明举举 例例结结 果果=等于等于abc=ABCFalse小写小写abc不等于大写不等于大写ABC大于大于(2+3)4True先计算先计算2+3=5,5大于大于4=大于等于大于等于8=(10- -2)True或大于或等于都为真,或大于或等于都为真,8=10- -2小于小于 stringstringTrue第一个字符串中第一个字符是空格,第一个字符串中第一个字符是空格,空格的空格的ASCII码小于码小于s,所以结果为,所以结果为真真=小于等于小
26、于等于220=110False或小于或等于都为真,或小于或等于都为真,220大于大于110,所以为假所以为假不等于不等于2yTrue2不等于不等于y,所以结果为真,所以结果为真第27页/共85页关系运算的规则如下:关系运算的规则如下: 当两个操作式均为数值型,按数值大小比较。 字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止。例如,ABCDEABRA,结果为False。 数值型与可转换为数值型的数据比较,例如,29189,按数值比较,结果为False。 数值型与不能转换成数值型的字符型比较,例如,77sdcd,不能比较,系统出错。 日期型数据进行比较时,首先将日期看
27、成yyyymmdd的八位整数,然后再按数值进行比较。 常见字符值的大小比较关系如下:空格09AZazb)Trueab为假,再进行取反运算,所为假,再进行取反运算,所以结果为真以结果为真And逻辑与逻辑与(5=3) And (95)True两个表达式的值都为真,结果为真两个表达式的值都为真,结果为真Or逻辑或逻辑或(xy) Or (45)True两个表达式的值一个为真,结果为真两个表达式的值一个为真,结果为真Xor逻辑异或逻辑异或(8=7) Xor (107)True两个表达式的值一真一假,结果为真两个表达式的值一真一假,结果为真Eqv逻辑等于逻辑等于(128) Eqv (cd)False两个表
28、达式的值一真一假,结果为假两个表达式的值一真一假,结果为假Imp逻辑蕴含逻辑蕴含(10=10) Imp (1222)True第一个表达式值为真,第二个为假,第一个表达式值为真,第二个为假,结果为真结果为真第29页/共85页说明:说明: 各逻辑运算符的优先级不相同,逻辑运算符的优先级从高到低依次为NotAndOrXorEqvImp。 VBA中常用的逻辑运算符是Not、And和Or。它们用于将多个关系表达式进行逻辑判断。例如,数学上表示某个数在某个区域时用表达式10X=10 And X20 参与逻辑运算的量一般都应是逻辑型数据,如果参与逻辑运算的两操作数是数值量,则以数值的二进制值逐位进行逻辑运算
29、(0为False,1为True)。第30页/共85页2 2表达式表达式 (1)表达式的组成 表达式由常数、变量、函数、运算符及圆括号按一定的规则组成。表达式通过运算后返回一个结果,运算结果的类型由数据和运算符共同决定。 (2)表达式的书写规则 运算符不能相邻。例如,a+*b是错误的。 在一个表达式中出现的括号应全部是圆括号,且必须配对使用。 在一个算术表达式中,乘号“*”既不能省略,也不能用“ ”代替,如xy应写成x*y。 表达式从左到右在同一基准并排书写,不能出现上下、标。 第31页/共85页 要注意各种运算符的优先级别,为保持运算顺序,在书写VBA表达式时需要适当添加括号“()”,若用到库
30、函数必须按库函数要求书写。例如,数学算式 应写成(-b+Sqr(b*b-4*a*c)/(2*a),其中,Sqr为求平方根的函数名。 aacbb242第32页/共85页(3)日期表达式 日期型表达式由日期型常数,变量,函数,算术运算符“+”、“-”和算术表达式组成。日期型数据之间只能进行加、减运算。由数字符号“#”所包围的具有有效格式的字符序列为日期文字。有效的格式包括区域设置中指定的日期格式或国际日期格式。例如,#10/01/2008#表示2008年10月1日。有两种情况: 两个日期型数据相减,结果是一个数值型数据(两个日期相差的天数)。例如,#12/20/2008#-#12/10/2008#
31、的结果为数值型数据10。 一个表示天数的数值型数据与日期型数据相加、减,结果仍为日期型数据。例如,/#12/10/2008#+10的结果为日期型数据#12/20/2008#(在Visual Basic中,实际输出结果的格式与系统设置有关)。 第33页/共85页10.2.6 10.2.6 函数函数 VBA中的函数与一般数学中函数的概念没有什么根本区别。函数是一种特定的运算,在程序中要使用一个函数时,只要给出函数名及参数,就能得到它的函数值。 在VBA语言中,有内部函数和用户自定义函数两大类。用户自定义函数是用户根据需要定义的函数(详见过程)。内部函数也称标准函数,是VBA本身提供的大量的内部函数
32、。在这些函数中,有些是通用的,有些与某种操作有关。这些函数可分为转换函数、数学函数、字符串函数、日期与时间函数和随机函数等。 第34页/共85页1. 1. 数学函数数学函数 数学函数用于各种数学运算,包括三角函数、求平方根、绝对值及对数、指数函数等。常用数学函数如表10-5所示,其中参数N、N1、N2表示有效的数值表达式。函函 数数 名名含含 义义实实 例例结结 果果Abs(N)取绝对值取绝对值Abs(- -3.5)3.5Sin(N)正弦函数正弦函数Sin(0)0Cos(N)余弦函数余弦函数Cos(0)1Tan(N)正切函数正切函数Tan(0)0Atn(N)返回用弧度表示的反正切返回用弧度表示
33、的反正切值值Atn(1)0. .785 398 163 397 448Exp(N)以以E为底的指数函数,即为底的指数函数,即eNExp(3)20. .086Log(N)以以e为底为底N的自然对数的自然对数Log(10)2. .3表10-5 常用数学函数第35页/共85页Rnd(N)产生大于等于产生大于等于0小于小于1的随机数的随机数Rnd01之间之间的随机数的随机数Sgn(N)符号函数符号函数Sgn(- -3. .5)- -1Sqr(N)平方根平方根Sqr(9)3Fix(N)取整取整Fix(- -3. .5)- -3Int(N)取小于或等于取小于或等于N的最大整数的最大整数Int(- -3.
34、.5)Int(3. .5)- -43Round(N1,N2)四舍五入(若省略四舍五入(若省略N2则取整)则取整)Round(88.48,1)Round(88.43)88. .588OctS(N)十进制转换成八进制十进制转换成八进制Oct$(100)144Hex$(N)十进制转换成十六进制十进制转换成十六进制Hex(100)64第36页/共85页2 2字符串函数字符串函数 VBA提供了大量的字符串函数,具有很强的字符处理能力,常用字符串函数。如表10-6所示。表10-6常用字符串函数函函 数数 名名含含 义义实实 例例结结 果果Ltrim$(字符串表达字符串表达式式)去掉字符串中左边的空格去掉字
35、符串中左边的空格LTrim$( ABCD)ABCDRtrim$(字符串表达字符串表达式式)去掉字符串中右边的空格去掉字符串中右边的空格RTrim$(ABCD )ABCDLeft$(字符串字符串,字符字符个数个数)返回从左边开始的指定数返回从左边开始的指定数目的字符目的字符Left(Visual Basic,6)VisualRight$(字符串字符串,字字符个数符个数)返回从右端开始的指定数返回从右端开始的指定数目的字符目的字符Right(Visual Basic,5)BasicMid$(字符串字符串,起始起始位置位置,字符个数字符个数)返回从起始位置开始的指返回从起始位置开始的指定个数子字符串
36、定个数子字符串,Mid$(ABCD,2,3)BCD第37页/共85页Len(字符串表达式字符串表达式)返回字符串的长度返回字符串的长度 Len(水电出版社水电出版社) 5LenB(字符串表达式字符串表达式)返回字符串中所占返回字符串中所占字节数字节数Len(水电出版社水电出版社)10Space(n)返回返回n个空格字符个空格字符Space(5) String$(n,字符串字符串)返回由首字符组成返回由首字符组成的的n个字符串个字符串String$(5, abc)aaaaaLcase(字符串表达式字符串表达式)大写字母转换为小大写字母转换为小写字母写字母Lcase$(Abc)abcUcase(字
37、符串表达式字符串表达式)小写字母转换为大小写字母转换为大写字母写字母Ucase$(abc)ABCAsc(字符串表达式字符串表达式)返回第一个字符的返回第一个字符的ASCII值值Asc(ab)97Chr(n)将将n的值转换为对的值转换为对应的应的ASCII字符字符Chr(65) AVal(字符串表达式字符串表达式)将将“字符串表达式字符串表达式”转化为数值转化为数值Val(23.56) 23.56Str(数值数值)将将“数值数值”转换为转换为字符串字符串Str(34. .56)34.56第38页/共85页3 3数据类型转换函数数据类型转换函数 在VBA编程中,经常要进行数据类型的转换,常用的数据
38、类型转换函数如表10-7所示。 表10-7 数据类型转换函数函函 数数 说说 明明Cint(x)把把x的小数部分四舍五入,转换为小数的小数部分四舍五入,转换为小数Ccur(x)把把x的值转换为货币类型值,小数部分最多保留的值转换为货币类型值,小数部分最多保留4位,位,且自动四舍五入且自动四舍五入Cdbl(x)把把x值转换为双精度数值转换为双精度数Clng(x)把把x的小数部分四舍五入转换为长整型数的小数部分四舍五入转换为长整型数Csng(x)把把x值转换为单精度数值转换为单精度数Cvar(x)把把x值转换为变体类型值值转换为变体类型值第39页/共85页4 4日期日期/ /时间函数时间函数 常用
39、的日期/时间函数如表10-8所示。表10-8 常用日期/时间函数函函 数数 名名返回类返回类型型功功 能能例例 子子返返 回回 值值Day(日期日期)Integer返回日期,返回日期,131的整数的整数Day(#2000/3/15#)15Month(日期日期)Integer返回月份,返回月份,112的整数的整数Month(#2000/3/15#)3Year(日期日期)Integer返回年份返回年份Year(#2000/3/15#)2000Weekday(日日期期)Integer返回星期几返回星期几Weekday(#2000/3/15#)4TimeDate返回当前系统时间返回当前系统时间Time
40、系统时间系统时间DateDate返回系统日期返回系统日期Date系统日期系统日期NowDate返回系统日期和时间返回系统日期和时间Now系统日期系统日期与时间与时间Hour(时间时间)Integer返回钟点,返回钟点,023的整数的整数Hour(#4:35:17PM#)16Minute(时间时间)Integer返回分钟,返回分钟,059的整数的整数Minute(#4:35:17PM#)35Second(时间时间)Integer返回秒钟,返回秒钟,059的整数的整数Second(#4:35:17PM#)17第40页/共85页9 92 27 VBA7 VBA的基本输入的基本输入/ /输出函数输出函
41、数1 1InputBox()InputBox()函数函数 在应用程序中,常使用InputBox()函数向变量输送数据,它不需要在窗体中创建控件就能输入变量的值,使用方便。InputBox()函数格式:InputBox(,标题 ,x坐标 ,y坐标帮助文件,内容功能:按给定的提示信息显示消息框,接收并返回用户输入的信息。其中:x坐标,y坐标是指定消息框在屏幕上的显示位置帮助文件:当在输入窗口选择“帮助”时所调用的显示文件。第41页/共85页例如,当执行下列命令后,将显示图10-2所示的输入窗口。Name= InputBox(输入查询的学生姓名, 输入命令演示, , , , demo.hlp, 10
42、)图10-2 InputBox()函数输入对话框第42页/共85页2 2MsgBOX() MsgBOX() 函数:函数: MsgBOX() 函数是产生消息框的函数,消息框通常用来显示一些提示信息,供用户选择,例如是选择“确定”还是选择“取消”等。 MsgBOX() 函数的格式: MsgBox (提示信息,消息类型标志+按钮类型+默认按钮,标题信息,帮助文件,内容) 功能:功能: 在程序运行中显示提示信息,产生一个对话框,等待用户单击选择的按钮,并返回一个整数值,用户可根据返回的值,决定下一步的操作。其中:其中:提示信息是需要在屏幕上显示的信息。 消息类型标志是显示的图形标志。如表10-9 所示
43、 按钮类型是指显示的按钮类型,如表10-10所示 第43页/共85页 默认按钮是在设定在多个按钮中的默认按钮,如表10-11所示。 标题是显示框的标题 帮助文件是当在显示的对话框中选择了“帮助”时,系统调用的帮助文件名。 表10-9 消息类型图形标志符号常量符号常量值值vbCriticalvbCritical16 16 图形图形vbQuestionvbQuestion32 32 ?图形?图形vbExclamqtionvbExclamqtion48 48 !图形!图形vbInformationvbInformation64 i64 i图形图形第44页/共85页表10-10 按钮类型值符号常量符号
44、常量值值在消息对话框显示的按钮在消息对话框显示的按钮vbOkOnly0“确定确定”按钮按钮vbOkCancel1“确定确定”、“取消取消”按钮按钮vbAbortRetryIgnore2“终止终止”“”“重试重试”“”“忽略忽略”按钮按钮vbYesNoCancel3“是是”“”“否否”“”“取消取消”按钮按钮vbYesNo4“是是”“”“否否”按钮按钮vbRetryCancel5“重试重试”“”“取消取消”按钮按钮表10-11 默认按钮值符号常量符号常量值值缺省的活动按钮缺省的活动按钮vbDefaultButtion10第一个按钮第一个按钮vbDefaultButtion2256第二个按钮第二个
45、按钮vbDefaultButtion3512第三个按钮第三个按钮第45页/共85页例如,当执行下列命令后,将显示图10-3所示的窗口。MsgBox (“选择正确吗?”,vbQuestion+vbOKCancel+vbDefaultButtion1, “项目选择”)图10-3 MsgBOX() 函数执行结果 第46页/共85页103VBA程序结构 VBA程序设计采用三种基本的控制结构,即顺序结构、分支结构、循环结构。这三种基本的控制结构是结构化程序设计的基础,它可使程序结构清晰、易读性强,以提高程序设计的质量和效率。 第47页/共85页10.3.110.3.1顺序结构顺序结构 顺序结构是最简单的
46、程序结构,它按命令在程序中出现的先后次序执行。执行顺序如图10-4所示图10-4 顺序程序执行流程第48页/共85页10103 32 2分支程序分支程序 程序中往往需要判断某个表达式,通过判断的结果转向执行不同的语句。 “分支程序”,是根椐对给定条件的判断,选择不同执行路径的程序结构。通常根椐执行路径的分支数分为“简单分支结构“、“双分支选择结构”和“多分支选择结构”。1 1简单分支简单分支(If(IfThenThen语句语句) )(1)简单分支的格式: IF Then END IF 或: If Then 第49页/共85页 功能:首先判断的值,若为真,则执行IF与END IF之间的语句行序列
47、,然后执行ENDIF后的语句;否则,直接执行ENDIF后的语句。其执行过程如图10-5所示。2 2双分支结构双分支结构(1)命令格式: IF Then ELSE END IF 第50页/共85页 (2)功能:若IF语句中的值为真,则执行,然后执行END IF后面的语句;若IF语句中的值为假,则执行ELSE 后面的,然后执行END IF后面的语句。其执行过程如图10-6所示。图10-5 简单分支结构图10-6双分支结构第51页/共85页 在实际应用中,经常使用If语句的嵌套格式,即一个If语句里又包含另一个If语句。 实例实例10-110-1:某商场为了促销,采用购物打折的优惠办法,每位顾客一次
48、购物的费用的打折优惠按以下方法计算: 1000元至2000元,按九五折优惠。 2000元至3000元,按九折优惠。 3000元至5000元,按八五折优惠。 5000元以上,按八折优惠。 编写程序,输入购物款数,计算并输出优惠价。 第52页/共85页代码如下:代码如下:Private Sub Command1_Click()Dim x As Single, y As Single x = Val(Text1) If x 1000 Then y = x Else If x 2000 Then y = 0.95 * x Else If x 3000 Then y = 0.9 * x第53页/共85页
49、Else If x 5000 Then y = 0.85 * x Else y = 0.8 * x End If End If End If End If Text2 = Str(y)End Sub第54页/共85页3 3带带ElseIfElseIf的块的块IfIf语句语句 实例10-110-1的程序出现多次If语句的嵌套,程序长,不便阅读。为此VBA提供了带ElseIf的块If语句,使程序简化易写。其格式如下: If Then Elself Then Else End If第55页/共85页实例实例10-210-2:将实例10-110-1改写成带ElselfElself的块IfIf语句格式代
50、码如下: Private Sub Command1_Click() Dim x As Single, y As Single x=Val(Text1) If x1000 Then y=x ElseIf x2000 Then y=0.95*x ElseIf x3000 Then y=0.9*x ElseIf x5000 Then y=0.85*x Else y=0.8*x End If Text2 =Str(y)End Sub 第56页/共85页4 4多分支选择结构多分支选择结构 IFEND IF语句虽然能实现条件的分支,但对于多个条件的判断,如仍用IFEND IF语句结构,程序就复杂得多。多分
51、支选择结构能解决多条件判断,并根椐满足的条件选择执行不同的语句执行。 (1)(1)命令格式命令格式Select Case 语句又称情况语句,是多分支结构的另一种形式。其格式如下:Select Case变量或表达式 Case表达式列表1 Case表达式列表2 Case Else End Select第57页/共85页(2) (2) 功能功能 多分支选择语句执行时先对“测试表达式”求值,然后测试该值与哪一个Case子句中的“表达式列表”匹配,如果找到了,就执行与该Case语句有关的语句块,执行完后转移到End Select后面的语句;如果没有找到,则执行与Case Else子句后的语句块,然后再转
52、移到End Select后面的语句。如果有多个表达式匹配,则执行第一个匹配的Case语句有关的语句块。 实例实例10-310-3:将实例10-1改写成使用情况语句实现。本例采用InputBox()函数输入购物金额,直接用Debug.Print输出优惠金额。第58页/共85页代码如下:Private Sub Form_Click() Dim x As Single,y As Single x=InputBox(请输入购物款数) x=Val(x) Select Case x Case Is1000 y=x Case Is2000 y=0.95*x Case Is3000 y=0.9*x Case
53、Is5000 y=0.85*x第59页/共85页 Case Else y=0.8*x End Select Debug.Print 购物款数:;x,优惠价:;yEnd Sub 同一个问题,解决的方法可能有多种,用户最好选择自己比较熟悉而又简单的方法来实现。 第60页/共85页 表达式列表的三种形式: 1.逗号分隔 case 10,20,30 2.to关键字 case 60 to 90 3.is关键字 case is30第61页/共85页Private Sub Form_Click() Dim iMonth As Integer 定义月份变量 iMonth = 1 为变量赋值 Select Ca
54、se iMonth 计算月份 Case Is = 3 月份为1、2、3 MsgBox(春天) Case 4 To 6 月份为4、5、6 MsgBox(夏天) Case 7, 8, 9 月份为7、8、9 MsgBox(秋天) Case Else 月份为10、11、12 MsgBox(冬天) End SelectEnd Sub第62页/共85页10103 33 3循循 环环 语语 句句 顺序程序和分支程序中的每条语句,一般只执行一次,而在实际应用中,经常遇到一些操作并不复杂,但需要反复多次处理的问题,即重复执行某一段程序。例如,计算k=n!,如果用顺序结构来处理将十分麻烦,而使用循环语句则可以轻松
55、实现。 循环程序是在指定的条件下多次重复执行的一组语句。VBA提供了如下几种不同风格的循环结构: 计数循环(Forext循环) While循环 Do循环(DoLoop循环) 第63页/共85页1 1ForFor循环语句循环语句 For循环语句的格式如下: For循环变量=初值To终值step步长 Exit For Next循环变量 其中:“循环变量”也称循环计数器或循环控制变量,为数值型。“初值”与“终值”均为数值表达式。“步长”是一个数值表达式,为循环变量的增量,可正可负;如果省略,默认为1。Exit For可用于提前退出For循环。Next后面的“循环变量”与For后面的“循环变量”必须相
56、同第64页/共85页执行过程:执行过程: (1)把“初值”赋给“循环变量”。 (2)检查“循环变量”是否超过“终值”,若没有,则执行“循环体”,若超出,则结束循环,执行Next后面的语句。 (3)“循环变量”+“步长”,转(2),继续循环。由上可以看出ForNext循环的循环次数由“初值”、“终值”和“步长”3个因素决定。实例实例10-410-4:编程求k=n!(n为自然数,在程序运行过程中从键盘输入n的值)。 第65页/共85页代码如下:Private Sub Commadn1_Click() Dim n As Integer n=InputBox(输入n的值:) 从键盘输入n的值 k=1
57、For i=1 To n k=k*i Next i msgbox “n!=”,kEnd Sub第66页/共85页2 2WhileWhile循环循环While循环的格式如下:While 条件 语句块Wend当条件为True时,执行循环体。 第67页/共85页3 3Do WhileDo WhileLoopLoop循环语句循环语句Do WhileLoop语句格式:DO WHILE Exit Do LOOP执行过程: 当条件成立,则执行循环体,遇到LOOP返回到DO语句,继续判断条件,不成立,则退出循环,执行LOOP后面的语句,Exit Do的作用是中止循环的执行。第68页/共85页实例实例10-61
58、0-6:编写程序计算S=1+2+3+100的值。程序代码如下:程序代码如下:Private Sub Command1_click() Dim I As Integer Dim S As Integer I=1 S=0 Do While I=100 S=S+I I=I+1 Loop Debug.Print “1+2+3+100=”;SEnd Sub第69页/共85页数组1、声明数组: Dim sName(2) As String 定义字符串数组sName 2、数组维数:维数或秩对应于用来识别每个数组元素的下标个数,一维以上的数组称为多维数组。 Dim sName1(2) As String 一维
59、数组Dim sName2(2, 3) As String 二维数组Dim sName3(2, 4, 4) As String 三维数组第70页/共85页3、数组大小:数组的Length属性返回数组中所有维数中的元素总数。4、数据类型:数组声明指定一个数据类型,数组的所有元素必须都是该类型数据。5、数组初始化:可以在定义数组的同时初始化数组,即数组的显式初始化: Dim iAge() As Integer = 12, 34, 56, 78 第71页/共85页例如:Private sub command1_click() Dim a(10,10) for m=2 to 4 for n=4 to 5
60、 a(m,n)=m*n next n next m msgbox a(2,5)+a(3,4)+a(4,5) End sub第72页/共85页10.410.4过程过程 在实际编程过程中,往往把一个复杂的程序分成多个相对独立的部分,每个部分用一个功能模块实现。从而简轻程序设计的难度。 VBA的过程分为两大类,一类是事件过程,当用户或系统在某对象上触发某事件时,会引发执行对象的某事件过程。另一类是用户自定义过程,在应用程序设计时,某一反复使用的功能可将其定义为过程,在程序的其他地方可以多次调用它,以实现其定义的功能。第73页/共85页10104 41 1过程过程1 1子过程定义子过程定义Public
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 购买单间小屋合同协议
- 认购协议几天内签订合同
- 试用期保密协议合同
- 詹姆斯合同和三方协议
- 购买琉璃瓦合同协议
- 购房合同和房产交易协议
- 设备经销商合同协议
- 2025年跨文化交际与语言学理论考试试题及答案
- 2025年景观设计师职业资格考试试题及答案
- 武汉旧机车交易合同协议
- 医学教材 医药市场营销学(陈玉文主编-人卫社)0医药产品价格与价格策略
- 安全生产培训方案模版(3篇)
- 材料吊装施工方案
- 温泉度假酒店项目可行性分析报告
- 数字华容道+课时2
- 慢性阻塞性肺疾患
- 林业基础知识考试题库单选题100道及答案解析
- 支票抵押借款协议
- 2024年个人之间清账协议书模板
- 静脉血栓栓塞症VTE防治质控培训试题
- 小学数学教学中问题解决策略的研究
评论
0/150
提交评论