课本课件-第6章程序设计基础_第1页
课本课件-第6章程序设计基础_第2页
课本课件-第6章程序设计基础_第3页
课本课件-第6章程序设计基础_第4页
课本课件-第6章程序设计基础_第5页
已阅读5页,还剩264页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据库管理系统应用第6章程序设计基础2023年1月18日教师:周浪部门:信息工程学院6.1VBA概述6.2VBA语言基础6.3VBA模块的创建6.4VBA程序设计基础6.5过程调用与参数传递6.6VBA程序错误处理目录学习要点VBA及模块的基本概念创建模块

VBA程序设计基础

VBA流程控制语句过程调用和参数传递VBA程序运行错误处理与调试6.1VBA概述

VBA:VisualBasicforApplication。VisualBasic(VB)是微软公司开发的一种面向对象的可视化编程语言,而VBA就是这种语言在Office软件编程中的应用。6.1.1VB编程环境:VBE

VBE(VisualBasicEditor)是编辑VBA代码时使用的界面。AddYourTexthere工程窗口标准工具条属性窗口监视窗口本地窗口代码窗口立即窗口VBE窗口P170立即窗口?<变量名或表达式>

在立即窗口中,可以输入或粘贴一行代码并执行该代码。

在立即窗口中显示变量或表达式的值的命令:

立即窗口中的代码是不被保存的。

通过Alt+F11组合键,可以在数据库窗口和VBE窗口之间进行切换。进入VBE编程环境(1)第七章中介绍,略

对于类模块:进入VBE编程环境(2)

对于标准模块:(1)创建新的标准模块时自动进入VBE。(2)修改已存在的标准模块时自动进入VBE。

(3)单击“数据库工具”选项卡的“宏”组中的“VisualBasic”按钮即可进入VBE。1.注释语句该语句常用在对整个的注释。

注释语句是为了增加程序的可读性,默认以绿色文本显示。

(1)序言式注释

(2)语句注释

格式:Rem注释语句该语句可直接位于其他语句之后。

格式:'注释语句6.1.2VBA程序书写原则6.1.2VBA程序书写原则当输入一行语句并按Enter键后,如果该代码以红色文本显示,则表明该行语句存在错误。通常将一个语句写在一行;语句较长时,在适当位置可用续行符“_”将语句连写在下一行;(续行符前应有一个空格)可以用冒号“:”将几个较短的语句写在同一行中。2.语句书写规定6.2.1数据类型Access数据表中的字段所使用的数据类型(OLE对象、备注、附件和计算型数据类型除外)在VBA中都有对应的数据类型。与前基本一致,不再赘述,重点掌握各种类型的常量表示。VBA基本数据类型见P174表6-2所示。6.2VBA语言基础6.2.2常量、变量与数组

常量是指在程序的运行过程中,其值不能被改变的量。

变量是指程序运行时其值会发生变化的数据。每个变量都有变量名,使用变量前可以指定其数据类型(显式声明),也可以不指定其数据类型(隐式声明)。

数组是由一组具有相同数据类型的变量(即数组元素)构成的集合。1.常量在Access中,常量的类型有以下3种:Const语句创建符号常量True、False等系统常量预定义的内部常量内部常量(1)符号常量

若在代码中要反复使用某个相同的值,或代表一些具有特定意义的数字或字符串,可以使用符号常量。

定义格式:Const

符号常量名[As数据类型]=表达式ConstPI=3.14ConstMYBIRTHDAY=#2003-4-1#【例】P175

(2)内部常量VBA提供了一些预定义的内部符号常量,它们主要作为DoCmd命令语句中的参数。内部常量以两个前缀字母指明了定义该常量的对象库,如:acForm、acCmdFont、VbKeyDelete等。通过对象浏览器可以查看所有可用对象库中的内部常量。(3)系统常量P265

系统定义的常量有七个:True、False、Null、Yes、No、On、Off

系统常量可以在所有应用程序中直接使用。2.内存变量1)变量的命名规则:P175变量名只能由字母、数字、汉字和下划线组成,不能含有空格和除下划线之外的其它字符,长度不能超过255个字符。

变量名必须以字母或汉字开头,且不区分字母的大小写。

变量名不能使用VBA的关键字。2)变量的创建方法(1)自动创建变量(隐式声明)自动创建变量,也称隐式声明变量。即在使用变量前没有声明其数据类型,借助将一个值赋予变量名的方式来建立变量。

因为在变量名称后没有附加类型说明,所以数据类型默认为变体数据类型(Variant)。【例】aa="Hello"bb=207

仅在当前过程有效。不提倡!(2)显式声明创建变量Dim变量名[As数据类型]Dim变量名1[As数据类型],变量名2[As数据类型],…,变量名n[As数据类型]

如果不使用As选项来定义变量的数据类型,系统默认该变量为Variant数据类型。2)变量的创建方法

先定义,再使用变量。提倡!举例(1)DimVar1AsInteger将Var1变量定义为整型(2)DimVar2AsDouble将Var2变量定义为双精度型(3)DimVar3AsSingle,Var4AsString将Var3定义为单精度型、Var4定义为字符串类型(5)Dimaa,bb,ccAsCurrency将cc变量定义为货币型,aa、bb变量定义为变体类型(4)Dimabc定义abc变量,为变体数据类型补充:类型说明符

使用类型说明符定义变量的数据类型时,必须将其放在变量名的最后。

举例:

Var1%=1234Var2#=123.45Var3$="abc"’类型为:Integer’类型为:Double’类型为:String强制声明

为了避免使用隐式声明变量,可以在程序开始处使用OptionExplicit语句来强制使用显式声明变量。3)变量的使用范围(作用域)过程变量(局部变量)局部变量只能在定义它的过程内使用,在其它的过程中无法存取局部变量。私有模块变量只能在定义它的模块(包括模块的子过程)内使用模块变量。在模块的声明区域用Private声明。公共模块变量(全局变量)在任何模块和过程中都可以访问全局变量。全局变量需要在模块的声明区域用Public声明。全局/模块变量声明方式Public变量名[As数据类型]P266

全局变量声明方式:Private变量名[As数据类型]

模块变量(私有变量)声明方式:

全局变量和模块变量必须在模块/窗体的声明区域中声明。变量的使用规则与作用域P176作用范围局部变量模块变量全局变量声明方式声明位置能否被本模块的其他过程存取能否被其他模块的过程存取Dim、StaticDim、PrivatePublic在子过程中在窗体/模块的声明区域在标准模块的声明区域不能不能不能能能能(1)全局变量与私有变量的比较全局变量与私有变量的比较(2)私有变量与局部变量的比较私有变量与局部变量的比较(3)静态变量与非静态变量静态变量与非静态变量第一次执行CC1第二次执行CC13.数组

数组是一种特殊的变量,由数组名和数组下标组成。

VBA中不允许隐式说明数组,数组在使用前必须用Dim命令声明,说明数组的大小、数据类型及作用范围。数组的类型静态数组中的元素个数在声明时被指定,在程序运行时不能改变数组元素的个数。

数组有两种类型:____________和___________。静态数组动态数组

(1)声明静态数组3.数组(1)声明静态数组Dim

数组名([下标下界to]下标上界)[As数据类型]

语法格式:一维数组二维或多维数组Dim

数组名([下标下界to]下标上界[,…])[As数据类型](1)声明静态数组说明As选项缺省时,数组中各元素为变体数据类型。下标下界的默认值为0,如果设置下标下界为非0值,既可以使用to选项,也可以在模块的通用声明部分用OptionBase来更改数组的默认下标下界。OptionBase1设置数组的下标下界为1OptionBase0设置数组的下标下界为默认值OptionBase格式:【例】Dimaa(5)AsSingleDimbb(1to6,2to7)AsStringDimcc(2to5,3to8,10)AsBooleanDimdd(3,1to4)2)数组的使用

语法格式:数组名(下标值)下标值是指定范围内(上下界之间)的一个整数,其值不能超出这个范围。如果是多维数组,则下标各整数间用逗号隔开。

【例】A1(0,0)="ABC"B1(3)=True3)声明动态数组动态数组中的元素个数在声明时不指定,在程序运行时可以改变数组元素中的个数。建立动态数组的步骤DimArray()(1)用Dim声明空的动态数组,但不指定数组元素的个数。如:ReDimArray(5,10)(2)然后用ReDim语句配置数组个数。说明:ReDim语句只能出现在过程中,可以改变数组的大小和上下界,但不能改变数组的维数。说明(1)

使用ReDim重新声明数组后,原有数组元素中的值将全部清除并取其默认值。数据类型默认值数值型包括:整型、长整型、单精度型、双精度型和货币型。数值型字符型布尔型日期型变体类型数据库对象0空字符串False00:00:00EmptyNothing说明(2)若要保留数组中元素原有的值,则需在ReDim后加Preserve选项。ReDim[Preserve]Array(5,10)Preserve可以改变数组中最后一维的上界,但不能改变这一维的下界,改变下界将导致错误。

若改变后的数组比原来小,则多余数据将丢失。举例(1)举例(2)6.2.3标准函数

函数的标准形式:函数名不可缺省。函数名(<参数列表>)函数的参数可以是常量、变量或表达式,且置于函数名后的圆括号中,多个参数间用逗号隔开。函数无参数时,其后的圆括号可以省略。函数被调用时,都会返回一个特定类型的值。注意事项

对每一个函数需掌握:(1)函数名(2)参数(个数、顺序、类型、含义)(3)函数功能(4)返回值及其类型1.数学函数

(1)绝对值函数功能:返回参数的绝对值Abs(<数值表达式>)【例】Abs(-25)25Abs(12\5+(-2)^3)6返回值数据类型:数值型1.数学函数

(2)向下取整函数返回值数据类型:数值型Int(<数值表达式>)【例】Int(3.56)3Int(-3.56)-4参数为负值时返回小于等于参数值的最大负数。功能:返回参数的向下取整的值1.数学函数

(3)取整函数(靠0取整)返回值数据类型:数值型Fix(<数值表达式>)【例】Fix(3.56)3Fix(-3.56)-3参数为负值时返回大于等于参数值的最小负数。功能:返回参数的整数部分1.数学函数

(4)求算术平方根函数返回值数据类型:双精度型Sqr(<数值表达式>)【例】Sqr(9)3Sqr(Sqr(16))2功能:计算参数的算术平方根1.数学函数

(5)三角函数返回值数据类型:双精度型Sin(<数值表达式>)功能:计算参数的正弦、余弦和正切值Cos(<数值表达式>)Tan(<数值表达式>)参数是以弧度为单位的角度值。1.数学函数【例】Pi=3.1415927Sin(90*Pi/180)1Cos(60*Pi/180)0.50000Tan(45*Pi/180)1.000001.数学函数(6)随机函数返回值数据类型:单精度型Rnd(<数值表达式>)【例】Int(100*Rnd)产生1个[0,99]的随机整数Int(100*Rnd)+1产生1个[1,100]的随机整数功能:产生一个大于等于0且小于1的随机数1.数学函数(7)四舍五入函数返回值数据类型:双精度型Round(<数值表达式1>[,<数值表达式2>])功能:对<数值表达式1>的值按<数值表达式2>指定小数位数进行四舍五入【例】Round(123.456,1)123.5Round(123.456,2)123.46Round函数Round(123.456,0)123Round(123.456)1232.字符串函数

(1)字符串检索函数功能:返回String2在String1中最早出现的位置InStr([Start,]String1,String2[,Compare])返回值数据类型:长整型InStr函数Compare指定字符串比较的方法,其值可以是:0

做二进制比较1

不区分大小写的文本比较(默认)2

基于数据库中包含信息的比较如果指定了Compare参数,则一定要有Start参数。【例1】InStr(3,"abcdABCD","BC")6InStr函数InStr("abcdABCD","BC")2InStr(1,"abcdABCD","BC",0)62.字符串函数

(2)字符串长度检测函数功能:返回字符串所含字符数Len(<字符表达式>|<变量名>)返回值数据类型:长整型如果变量是字符型,则函数返回的即为该变量所含的字符数(未赋值时返回0)。如果变量是其它数据类型,则函数返回的即为该数据类型所占空间。【例1】Len("123.456")7Len函数Len("abc"+"南京")52.字符串函数

(3)取子串函数功能:从字符表达式中截取一个子字符串Left(<字符表达式>,<N>)返回值数据类型:字符型Right(<字符表达式>,<N>)Mid(<字符表达式>,<N1>[,<N2>])【例1】字符串截取函数Left("abcd南京",3)abcRight("abcd南京",2)南京Mid("abcd南京",5,2)南京Mid("abcd南京",3)cd南京2.字符串函数

(4)生成空格函数功能:返回数值表达式所指定的空格数Space(<数值表达式>)返回值数据类型:字符型Space(2*3)""【例】Space(0)""2.字符串函数

(5)大小写转换函数功能:将字符串中的小写字母转换成大写字母Ucase(<字符串表达式>)返回值数据类型:字符型功能:将字符串中的大写字母转换成小写字母Lcase(<字符串表达式>)返回值数据类型:字符型【例】大小写转换函数Ucase("abcABC")ABCABCLcase("abcABC")Lcase(Ucase("abc"))abcabcabc2.字符串函数

(6)去除空格函数功能:删除字符串的首部、尾部和首尾空格LTrim(<字符表达式>)返回值数据类型:字符型RTrim(<字符表达式>)Trim(<字符表达式>)【例】删除空格函数"X"<rim("ab")&"Y"XabY"X"&RTrim("ab")&"Y""X"&Trim("ab")&"Y"XabYXabY3.日期/时间函数

(1)系统日期和时间函数功能:返回当前系统日期Date()返回值数据类型:日期时间型Time()Now()功能:返回当前系统时间功能:返回当前系统日期和时间返回的日期格式由操作系统设置的日期格式决定3.日期/时间函数

(2)截取日期分量函数功能:返回日期表达式年份Year(<日期表达式>)返回值数据类型:整型如果参数中略去了年份,则返回系统日期中的年份【例】Year(#2011-10-20#)+102021Year(Date())-Year(#2000-1-1#)14截取日期分量函数功能:返回日期表达式月份Month(<日期表达式>)返回值数据类型:整型【例】Month(#2011-10-8#)+1020截取日期分量函数功能:返回日期表达式日期Day(<日期表达式>)返回值数据类型:整型【例】Day(#2011-10-20#)+1030截取日期分量函数功能:返回1~7的整数,表示星期几Weekday(<日期表达式>[,w])返回值数据类型:整型

参数w用来指定一星期的第一天:常数值描述常数值描述vbSunday1星期日(默认值)vbThursday5星期四vbMonday2星期一vbFriday6星期五vbTuesday3星期二vbSaturday7星期六vbWednesday4星期三Weekday函数【例】Weekday(#2015-10-01#)5Weekday(#2015-10-01#,vbSunday)5Weekday(#2015-10-01#,2)43.日期/时间函数

(3)截取时间分量函数功能:返回时间表达式的小时数Hour(<时间表达式>)返回值数据类型:整型Minute(<时间表达式>)Second(<时间表达式>)功能:返回时间表达式的分钟数功能:返回时间表达式的秒数截取时间分量函数【例】Hour(#2011-10-0110:20:30#)10Minute(#2011-10-0110:20:30#)20Second(#2011-10-0110:20:30#)30Minute(#10:20:30#)20Second(#10:20#)0Hour(Null)Null3.日期/时间函数(4)DateSerial函数

功能:返回包含指定年、月、日的日期

DateSerial(<年份>,<月份>,<日>)

返回值数据类型:日期型

<年份>为100~9999间的整型数据,或一个数值表达式,表示返回日期的年份。

<月份>为整型数据或数值表达式,表示返回日期的月份。

<日>为整型数据或数值表达式,表示返回的日期。DateSerial函数【例】DateSerial(2011,10,20)2011-10-20DateSerial(2011,13,32)2012-2-1DateSerial(2011+10,10+5,23+20)2022-4-12DateSerial(2015,3,0)2015-2-28DateSerial(2011,0,1)2010-12-13.日期/时间函数功能:返回代表指定日期的指定日期部分的时间间隔。返回值数据类型:整型参数:interval,时间间隔,如P184表6-6 Date,要计算的指定日期例如:Datepart(“w”,#2015-10-1#),返回5Datepart(“ww”,#2015-10-1#),返回40。

DatePart(<interval>,<date>)(5)DatePart函数3.日期/时间函数语法:DateAdd(<Interval>,<number>,<date>)功能:在向指定日期加上一段时间的基础上,返回新的datetime值。yyyy

年yearq

季Quarterm

月Monthy 一年的日数d

日Dayw 一周的日数ww

周WeekDayh 时Hourm 分钟Minutes 秒Seconddateadd("ww",3,#2015-10-1#)返回:2015/10/22(6)DateAdd函数3.日期/时间函数(7)DateDiff函数DateDiff(<Interval>,<startdate>,<enddate>)功能:返回两个指定日期之间的日期间隔或时间间隔。返回值数据类型:整型例:datediff("yyyy",#2000-9-20#,#2015-10-1#)

结果为154.类型转换函数(1)ASCII函数功能:返回字符表达式中第1个字符的ASCII码值Asc(<字符串达式>)返回值数据类型:整型Asc("abcd")97Asc("ABCD")65【例】Asc("")出错Asc("南京")-15153Asc("")324.类型转换函数(2)Chr函数功能:返回与字符代码相对应的字符Chr(<字符代码>)返回值数据类型:字符型Chr(97)aChr(65)A【例】Chr(13)回车符Chr(-15153)南"AB"+Chr(10)+"CD"ABCDChr(10)为换行字符4.类型转换函数(3)数值转字符串函数功能:将数值表达式的值转换为字符串Str(<数值表达式>)返回值数据类型:字符型

当一个数字转换成字符串时,会在其前头保留一个空格来表示正负。表达式值为正,返回的字符串包含一前导空格表示正号。Str函数【例】■表示一个空格Str(123)+"abc"■123abcStr(-123)+"abc"-123abc"abc"+Str(123)abc■123"abc"+Str(-123)abc-123Str(12.3)ߛ-10-1#■12.32011-10-1True&Str(12.3)True■12.34.类型转换函数(4)字符串转数值函数功能:将由数字组成的字符串转换为数值型Val(<字符串表达式>)返回值数据类型:数值型数字字符串转换时可自动将字符串中的空格、制表符和换行符去掉。转换时当遇到系统不能识别为数字的第一个字符时,停止字符串的转换。Val函数【例】Val("123")+100223Val("12.3")+100112.3Val("-12■34")-1000-2234Val("12■3.4")123.4Val("12ab34")12Val("ab34")0Val("2E3")20005.条件函数

(1)IIF函数IIF(条件表达式,表达式1,表达式2)

功能:根据条件表达式的值,返回两个值中的一个。

说明:当条件表达式的值为真时,返回表达式1的值,否则返回表达式2的值。

格式:IIF函数举例【例1】根据cj变量的取值返回“及格”或“不及格”。Cj=85Result=IIf(cj<60,“不及格”,“及格”)【例2】Y=IIf(X>=0,

1,-1)1x>=0Y=-1x<0IIF函数举例【例3】

1x>0Y=0x=0-1x<0IIF函数举例Y=IIf(X>

0,

1,IIf(X=0,0,-1))

(2)Switch函数Switch(Expr1,Value1[,Expr2,Value2,…])

功能:

依次判断各条件表达式的值,当某一表达式的值为True时,即输出其后的值。

说明:条件表达式是由左至右进行计算判断的。

格式:5.条件函数Switch函数举例【例1】根据输入的成绩Score判定等级:若低于60分为“不及格”;若大于等于60分且小于85分为“及格”;若大于等于85分且小于等于100分为“良好”。Result=Switch

(

Score<60,

"不及格",_

Score<85,

"及格",

Score<=100,

"良好"

)【例2】

1x>0Y=0x=0-1x<0Y=Switch(X>

0,1,X=0,0,X<0,-1)Switch函数举例(3)Choose函数Choose(Index,Choice1[,Choice2,…])

功能:根据Index的值从其后的列表中选择并返回一个值。

说明:只有当Index的值介于1和可选的项目数之间,函数才会返回其后对应的选项的值,否则返回无效值(Null)。

格式:5.条件函数Choose函数举例【例1】将输入的数字x(1~9)转换为相应的英文单词。cResult=Choose(x,"One","Two","Three",_"Four","Five","Six","Seven",_"Eight","Nine")Choose函数举例【例2】根据输入的数字x返回相应的星期几。cResult=Choose(x,"星期一","星期二",_"星期三","星期四","星期五",_"星期六","星期日","输入错误!")(1)输入框函数(InputBox)功能:在对话框中显示提示信息,等待用户输入正文并单击按钮,并返回文本框中输入的字符串。InputBox(Prompt[,Title][,Default][,Xpos][,Ypos][,Helpfile,Context])返回值数据类型:字符型6.其他函数参数说明

Prompt提示字符串,最大长度约为1024个字符。如果包含多行,那么可以在各行之间用回车符Chr(13)、换行符Chr(10)或者它们的组合Chr(13)&Chr(10)来分隔。Title显示在对话框标题栏中的字符串表达式。如果缺省,则把应用程序名放入标题栏。

Default显示在文本框中的字符串表达式,如果缺省,则文本框为空。【例】?InputBox("请输入你的学号:","输入框","001")(2)消息框(MsgBox)函数功能:在对话框中显示信息,等待用户单击按钮,并返回一个整值型数据,告诉用户单击的是哪个按钮。

MsgBox(Prompt[,Buttons][,Title][,Helpfile][,Context])返回值数据类型:整型

Prompt显示在对话框中的信息,最大长度大约为1024个字符。如果包含多个行,可以各行之间用回车符Chr(13)、换行符Chr(10)或是它们的组合分隔。消息框(MsgBox)

Buttons是一个数值表达式的和,指定在消息框中显示的按钮数目及形式、使用的图标样式、默认按钮是什么以及消息框的强制回应等。如果缺省,则Buttons的默认值为0。MsgBox("操作完成!")【例】Buttons选项取值说明(1)常量数值说明vbOKOnly0

仅有确定按钮vbOKCancel1

确定和取消按钮vbAboutRetryIgnoue2

终止、重试和忽略vbYesNoCancel3

是、否和取消按钮vbYesNo4

是、否按钮vbRetryCancel5

重试和取消按钮【表1】P188Buttons选项取值说明(2)常量数值说明vbCritical16显示CriticalMessage图标vbQuestion32显示WarningQuery图标vbExclamation48显示WarningMessage图标vbInformation64显示InformationMessage图标【表2】P188Buttons选项取值说明(补充)常量数值默认按钮vbDefaultButton10第一个按钮是默认按钮vbDefaultButton2256第二个按钮是默认按钮vbDefaultButton3512第三个按钮是默认按钮vbDefaultButton4768第四个按钮是默认按钮【表3】举例?MsgBox("操作完成!",1+32)【例】?MsgBox("操作完成!",2+48+256)【例】函数的返回值(补充)返回值单击的按钮返回值单击的按钮1确认5忽略2取消6是3终止7否4重试【例】Ucase("Abc")&Trim("xy")ABCx□yVAL(Left(STR(3145.25),4))

314Abs(Int(7.2-10)-Fix(7.2-10))1Exp(Log(Sqr(25)))+Year(#2014-10-1#)2019函数综合举例(1)Mid("abc"+Ltrim(space(3)+"南京"),3,month(Date)/4)

c南(设当前为10月份)函数综合举例(2)【例】将下面的数学公式写成Access表达式:(-b+Sqr(b^2-4*a*c))/(2*a)+Log(12)-Abs(10-Exp(2))+Sin(30*3.1415927/180)【例】编写一个返回系统日期的函数过程Getdate。函数综合举例(3)FunctionGetdate()AsStringGetdate=Str(Year(Now()))+"年"+Str(Month(Now()))+"月"+Str(Day(Now()))+"日"EndFunction'调用上述函数,并将结果在立即窗口中显示。

SubPdate()

Debug.PrintGetdate()EndSub6.2.4运算符与表达式

运算符是表示实现某种运算的符号。算术运算符

根据运算的不同,VBA中的运算符可分为4种类型:字符串运算符关系运算符逻辑运算符1.运算符(1)算术运算符P188算术运算符用来执行简单的算术运算。运算符名称优先级说明^乘幂运算1计算乘方和方根*乘法运算2/\Mod+-浮点除法整数除法取模运算加法运算减法运算2标准除法,结果为浮点数整数除法,结果为整数求余数3455说明(1)

乘幂运算(^)

在运用乘幂运算符时,只有当指数为整数值时,底数才可以为负数。【例】2^382^(1/2)或2^0.51.4142(-0.5)^20.25(-2)^0.5出错True^3-1(注:True作为-1参加运算,False作为0参加运算)说明(2)

整数除法(\)对两个操作数做除法运算并返回一个整数。整除的操作数一般为整型。当操作数是小数时,首先被四舍五入为整型或长整型,然后再进行整除运算。如果运算结果是小数,系统自动将其截为整型或长整数(截尾取整),不再进行四舍五入处理。整数除法举例3/21.53\21(标准除法)(整数除法)3.4\213.6\223.6\2.326.4\3.613.5\7/3.52"7"\"3"25\2*305/2*37.53*3\3/39说明(3)

取模运算(Mod)对两个操作数做除法运算并返回余数。

如果操作数有小数时,则系统将其四舍五入为整数后再进行运算。

结果(即余数)的正负号与被除数相同。取模运算举例【例】10mod4210mod4.2210mod4.60-10mod4-210mod-42-10mod-3-1-10-(余数)4-10-(-)4-10-(余数)3-10-(-)3说明(4)算术运算符两边的操作数都应该是数值型。【例】"123"+100223True+109Flase+1010#2011-10-10#-1#2011-10-9#

如果是数字字符或逻辑型,则系统自动将其转换成数值型后再进行运算。(2)字符运算符字符串运算符有两个:&

运算符、+

运算符字符串运算符就是将两个字符串连接起来生成一个新的字符串。&运算符

运算符&两边的操作数可以是字符型、数值型或日期型。进行连接操作前先将数值型、日期型转换为字符型,然后再做连接运算。

由于符号&还是长整型定义符,在字符串变量使用运算符&时,变量与运算符之间必须加一个空格。

&运算符用于强制两个字符串的连接。【例】aa&=123&作为长整型定义符aa&"123"&作为字符串连接运算符&运算符举例aa="ABC"定义变量aa,并赋值aa&"XYZ"出错aa&"XYZ"ABCXYZ"123"&"XYZ"123XYZ123&"XYZ"123XYZ123&456123456"XYZ"

&(2*3)XYZ6#2011-10-8#&1232011-10-8123#2011-10-8#&12+32011-10-815+运算符如果一个是数字字符串,另一个为数值型,则系统自动将数字字符串转化为数值,然后进行算术加法运算。如果两边的操作数都是数值型,则做普通的加法运算。

+运算符用于连接两个字符串,形成一个新的字符串。如果一个是非数字字符串,另一个为数值型,则出错。如果两边的操作数都是数字字符串,则做字符串连接运算。+运算符举例123+456579(加法运算)"123"+"456"123456(连接运算)123+"456"579(加法运算)"123"+"ABC456"123ABC456(连接运算)123+"ABC456"出错#2011-10-8#+102011-10-18#2011-10-18#-102011-10-8#9999-12-31#+1溢出#100-1-1#-1溢出(3)关系运算符关系运算符用于对两个表达式比较大小,比较的结果是一个逻辑值,即:若关系成立,则为真(True);反之则为假(False)。名称运算符举例说明

等于="abc"="abd"False

大于

大于等于

小于等于

小于

不等于>>=<=<<>"abc">"abd"45<123"45"

<="123"#2012-1-1#>=#2011-1-1#"abcd"

<>"ABCD"FalseTrueTrueFalseFalse关系运算符规则汉字字符按汉语拼音比较大小,且大于西文字符。

如果参与比较的两个操作数都是字符型,则从左到右一一对应逐字符比较。字母不区分大小写,且大于数字。

如果参与比较的两个操作数都是数值型,则按它们的大小进行比较。字符串中:汉字字符>西文字符(大小写相同)>数字串>空格串(4)逻辑运算符

逻辑运算符用于对两个逻辑量进行逻辑运算,其结果仍然是一个逻辑值。与运算And

逻辑运算符主要有:或运算Or非运算Not各个逻辑运算符的真值表P191XYNotXXAndYXOrYTrueTrueTrueFalseFalseTrueFalseFalseFalseFalseTrueTrueTrue

False

FalseFalse

TrueTrueTrueFalse

2.表达式和优先级

表达式由字面值、常量、变量、运算符、函数、标识符、逻辑量和括号等按一定的规则组成。

表达式通过运算得出结果,运算结果的类型由操作数的数据类型和运算符共同决定。在VBA中,逻辑量在表达式中进行算术运算时,True值被当成-1,False值被当成0处理。(1)表达式的组成(2)表达式的书写规则只能使用圆括号()且必须成对出现乘号(*)不能省略表达式从左至右书写,不大小写区分2.表达式和优先级(3)运算优先级P192优先级高

低高

低算术运算符字符串运算符关系运算符逻辑运算符指数运算^&、+优先级相同=、<>、>、>=、

<、<=优先级相同Not负数-And乘和浮点除*/Or整数除法\模运算Mod加减法+-

注:圆括号的优先级别最高。表达式举例103^(54-365\7)+1-13mod5+2*10^2/537"3+4"&"="&3+43+4=7"abc"&123abc123"123"+456ߛ-10-1#5792011-10-1"abc">"abd"And#11-25-99#>#12-25-98#False15<8+2*5Or2>FalseAnd"A"&"12"<"B"True#2011-12-20#-102011-12-106.3VBA模块的创建

模块就是将VBA______和______作为一个单元来保存的集合。

模块是Access项目的基本构件。

声明过程

模块以__________为基础编写。VBA语言

模块以____________________或_____________为单元的集合方式存储。

在Access中,模块分为________和__________两种类型。子过程(Sub)类模块函数过程(Function)标准模块6.3VBA模块的创建模块声明过程声明函数过程子过程……6.3VBA模块的创建6.3.1类模块的创建

窗体模块和报表模块都是类模块,而且它们都依附于某一窗体或报表而存在。类模块的创建方法参考第7章。6.3.2标准模块的创建

标准模块包含的是不与任何对象相关联的通用过程,这些过程可以在数据库中的任何位置直接调用执行。

全局变量或公共过程具有全局的特性,其作用范围在整个应用程序里。

随应用程序的运行而开始、关闭而结束。标准模块示例

模块是以过程为单元组成的。(1)声明(一个)(2)子过程/函数过程(一个/多个)

声明区域用于定义模块中使用的变量等内容。

过程是由代码组成的单元,包含一系列计算语句和执行语句。过程有两种类型:Sub过程和Function过程。6.3.2标准模块的创建1.Sub过程Sub过程又称子过程,用于执行一个操作或一系列的运算,无返回值。[Public|Private][Static]Sub

子过程名([形参列表])

[<程序代码>][ExitSub][<程序代码>]

EndSub

过程名不能与所在模块的模块名相同。

如果没有参数,过程名后也必须包含一对()。说明Public:过程能被所有模块的所有其它过程调用。Private:过程只能被同一模块的其它过程调用。Static:表示调用之间保留Sub过程的局部变量的值。即使过程中也使用了同名变量,对在Sub外

声明的变量不会产生任何影响。如果没有使用Public或Private指定,过程则是Public(默认情况);如果没有使用Static,则在调用之后不会保留局部变量的值。Sub过程调用方法

语法格式一Call子过程名[(<实参列表>)]

实参列表和形参列表必须一一对应。

语法格式二子过程名[<实参列表>]Public与Private的举例(1)Public与Private的举例(2)Public与Private的举例(3)2.Function过程语法格式[Public|Private][Static]Function

函数名([形参列表])

[AS数据类型][程序代码][ExitFunction]

函数名

=表达式

[程序代码]

EndFunction

在函数过程执行中一旦遇到ExitFunction语句,则结束函数过程的执行。函数过程的调用形式

语法格式函数过程名([<实参列表>])

不能使用CALL来调用执行。

需要直接引用函数名并加括号来辨别。

可以在查询、宏等中调用使用。举例【例】编写一个返回系统日期的函数过程Getdate()。FunctionGetdate()Getdate=Str(Year(Now))+"年"+Str(Month(Now))+"月"+Str(Day(Now))+"日"EndFunctionSubPdate()Debug.PrintGetdate()EndSub

调用函数过程:

运行结果将显示在立即窗口中。6.4VBA程序设计基础

要用Access来完成一个实际的而用宏又实现不了的数据库应用系统时,就应该掌握VBA编程。VBA中的语句是能够完成某项操作的一条完整命令,它可以包含关键字、函数、运算符、变量、常量以及表达式等。6.4VBA程序设计基础VBA语句类型VBA的语句分为3种类型:

声明语句

赋值语句

控制结构语句

为变量、符号常量或程序命名,并且指定一个数据类型。把一个值或表达式赋给一个变量。赋值符号:=用来控制各语句的执行顺序。6.4.1声明语句

在VBA中,使用声明语句去命名和定义过程、变量、数组以及符号常量。

当声明一个过程、变量或常量时,也同时定义了它的作用范围,而此范围取决于声明位置以及所用的关键字。过程中声明的变量只在过程中可以使用,而且在调用时会丢失其变量的值,除非将它声明为Static。6.4.2赋值语句

赋值语句用于指定一个值或表达式给变量或符号常量。

语法格式:[Let]变量名=

值或表达式

功能:将指定的值或表达式的值赋给变量。

通常情况下省略Let。

赋值语句中的“=

”并不是数学中的等号,它表示:将右边的表达式的运算结果赋予变量。赋值语句举例【例】指定InputBox函数返回值给变量YourName。SubQuestion()DimYourNameAsStringDimaAsIntegerYourName=InputBox("Whatisyourname?")a=MsgBox("Yournameis"&YourName)EndSub

语句的执行方式按流程可以分为:6.4.3控制结构语句顺序结构按照语句的逻辑顺序依次执行分支结构根据条件是否成立选择语句执行路径循环结构可重复执行某一段程序语句例1:已知圆的半径r(从键盘上输入),编写area子过程求圆的面积s。PublicSubarea()

ConstPI=3.14DimrAsSingler=InputBox("请输入圆的半径:")S=PI*r^2Debug.Print"圆的面积为:"&sEndSub1.顺序结构语句例2:从键盘上输入两个数x、y,编写swap子程序实现这两个数据的交换。PublicSubswap()x=InputBox("请从键盘上输入一个数X:")y=InputBox("请从键盘上输入一个数Y:")Debug.Print"交换前X、Y分别为:",x,yt=xx=yy=tDebug.Print"交换后X、Y分别为:",x,yEndSub510txy51051.顺序结构语句

在VBA代码中使用If条件语句,可根据条件表达式的值来选择程序执行哪些语句。2.分支结构语句If条件语句的主要格式:单分支双分支多分支(1)单分支结构语句

单分支结构语句格式(一):If<条件表达式>Then<语句>功能:

当条件表达式为真时,执行Then后面的语句,否则不做任何操作。说明:Then后的语句只能是一条,或者是多条语句用冒号分隔,且必须与If语句在同一行上。

(1)单分支结构语句

单分支结构语句格式(二):

If<条件表达式>Then

<语句块>

End

If功能:当条件表达式为真时,执行Then后面的语句,否则不做任何操作。说明:

语句块中的语句可以是多条,且可以多行书写。对条件表达式求值语句块IfTrueFalseEndIf后的语句单分支结构语句流程图单分支结构语句举例【例1】比较两个数值变量x和y的值,用x保存大的值,y保存小的值。Ifx<yThent=xx=yy=t

EndIf或者:Ifx<yThent=x:x=y:y=t510txy5105单分支结构语句举例【例2】随机出一道两位数加法题,如答对了,显示“答案正确!”;答错显示“答错了!”。Subtest()DimAAsInteger,BAsInteger,SumAsIntegerA=10+Rnd*90:B=10+Rnd*90Sum=InputBox(A&"+"&B&"=?","加法")

IfSum=A+BThenMsgBox("答案正确!")IfSum<>A+BThenMsgBox("答错了!")EndSub单分支结构语句举例【例3】判断下面的程序代码的功能。SubAbstr()DimAAsSingle,BAsSingleA=InputBox("请输入一个数值:")

IfA>=0ThenB=AIfA<0ThenB=-ADebug.PrintBEndSub程序代码的功能:计算所给数值的绝对值。单分支结构语句举例【例4】编写程序:输入一个日期,若是未来的日期则显示“未到期!”;若是以前的日期,则显示“已到期!”。SubABC()DimAAsDateA=InputBox("请输入一个日期:")

IfA>DateThenDebug.Print"未到期!"

IfA<=DateThenDebug.Print"已到期!"EndSub(2)双分支结构语句

双分支结构语句格式:If<条件表达式>Then<语句1>Else<语句2>功能:当条件表达式为真时,执行Then后面的语句1或语句块1,否则执行Else后面的语句2或语句块2。

If<条件表达式>Then <语句块1>

Else <语句块2>

End

If对条件表达式求值语句块1语句块2IFENDIF双分支结构语句流程图TrueFalse双分支结构语句举例【例1】任意输入两个数值,输出两个数中的最大值。Subtest()DimAAsSingle,BAsSingleA=InputBox("请输入第一个数值:")B=InputBox("请输入第二个数值:")

IfA>=BThenmax=AElsemax=BDebug.Print"最大数值是:"&maxEndSub例1的另一种写法Subtest()DimAAsSingle,BAsSingleA=InputBox("请输入第一个数值:")B=InputBox("请输入第二个数值:")

IfA>=BThen

max=A

Else

max=BEndIfDebug.Print"最大数值是:"&maxEndSub双分支结构语句举例【例2】自定义过程e,其功能是:如果当前系统时间在12~18点之间,则在立即窗口中显示“下午好!”,否则显示“欢迎下次光临!”。Sube()IfHour(Time())>=12AndHour(Time())<18ThenDebug.Print"下午好!"ElseDebug.Print"欢迎下次光临!"EndIfEndSub双分支结构语句举例【例3】SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox("请输入一个数值:")

If

X>=0

Then

Y=1

Else

Y=-1

Debug.Print

YEnd

Sub1x>=0Y=-1x<0例3的第2种写法SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox(

"请输入一个数值:"

)

If

X>=0

Then

Y=1

Else

Y=-1

EndIf

Debug.Print

YEnd

Sub例3的第3种写法SubXY(

)

Dim

X

As

Single

,

Y

As

Single

X=InputBox("请输入一个数值:")

Y=IIf(X>=0,1,-1)

Debug.Print

YEnd

Sub双分支结构语句举例【例4】输入一个整数,编程判断该数是奇数还是偶数。

SubParity()DimiAsIntegeri=InputBox("请输入一个整数:")

Ifi/2=i\2ThenDebug.Printi;"是偶数。"

ElseDebug.Printi;"是奇数。"

EndIfEndSub双分支结构语句举例【例5】输入购书数量及单价,如果购买10本以上,就打八折,否则不打折。计算并输出购书金额。Subbuy()DimnAsInteger,priceAsSingle,moneyAsSinglen=InputBox("请输入购书数量","购书数量")price=InputBox("请输入单价","单价")

Ifn<10Thenmoney=price*n

Elsemoney=price*n*0.8

EndIfMsgBox("购书金额="+Str(money)+"元")EndSub(3)If…Then…ElseIf多分支结构语句语句格式:

If<条件表达式1>Then <语句块1>

ElseIf<条件表达式2>Then <语句块2>…………[Else <语句块n>]

End

If语句流程图ElseIfTrueFalseEndIf后语句语句块1条件表达式2……FalseTrue语句块2True……False条件表达式1语句块n功能【例1】判断键盘输入的字符是何种类型的字符。

功能:依次测试条件表达式1、表达式2、……,当遇到条件表达式为真时,执行该条件下的语句块。如均不为真,若有Else选项,则执行Else后的语句块,否则执行EndIf后面的语句。双分支结构语句举例SubCharacter()strChar=InputBox("请输入任意一个字符")nChar=Asc(strChar)

IfnChar>=65AndnChar<=90ThenDebug.Print"输入的字符是大写字母"

ElseIfnChar>=97AndnChar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论