模块教学讲解教学课件_第1页
模块教学讲解教学课件_第2页
模块教学讲解教学课件_第3页
模块教学讲解教学课件_第4页
模块教学讲解教学课件_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

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

文档简介

模块ppt课件11、用道德的示范来造就一个人,显然比用法律来约束他更有价值。——希腊12、法律是无私的,对谁都一视同仁。在每件事上,她都不徇私情。——托马斯13、公正的法律限制不了好的自由,因为好人不会去做法律不允许的事情。——弗劳德14、法律是为了保护无辜而制定的。——爱略特15、像房子一样,法律和法律都是相互依存的。——伯克模块ppt课件模块ppt课件11、用道德的示范来造就一个人,显然比用法律来约束他更有价值。——希腊12、法律是无私的,对谁都一视同仁。在每件事上,她都不徇私情。——托马斯13、公正的法律限制不了好的自由,因为好人不会去做法律不允许的事情。——弗劳德14、法律是为了保护无辜而制定的。——爱略特15、像房子一样,法律和法律都是相互依存的。——伯克本章内容模块对象概述VBA程序基础选择语句循环语句数组过程一、模块对象概述模块(标准模块)是Access数据库7个对象之一,其实质就是没有界面的VBA程序。模块具有很强的通用性,窗体、报表等对象都可以调用模块内部的过程。模块包含若干由VBA代码组成的过程。每个过程完成一个相对独立的操作,不涉及界面,是“纯”程序段。VBA是VB的子集。VBA是VB与office结合起来形成的Visualbasicforapplication。

模块与过程模块实际上放置VBA代码的容器,一个模块包含一个声明区域(声明模块所使用的变量、常量、自定义类型),包含一个或多个子过程或函数过程。Sub过程(又称为子过程),其格式如下:Sub过程名[程序代码]EndSub调用子过程用Call过程名Function过程(又称函数过程),其格式如下:Function过程名[程序代码]EndFunction函数过程和子函数可以返回一个值,所以在表达式中可将其当作变量使用,

二、VBA程序基础面向对象编程基础VBA环境的进入模块和过程的创建数据类型、常量、变量与表达式VBA的常用内部函数数据的输入与输出

面向对象程序设计的基本概念1、对象和集合一个对象就是一个实体。如:一辆自行车对象的属性:即,自行车的颜色和尺寸

引用方法:对象.属性对象的方法:即,对象可以执行的行为,如自行车行走。

引用方法:对象.方法ACCESS中除提供了数据库的7个对象外,还提供了一个DoCmd对象,它主要用来在VBA编程中实现对ACCESS的操作。如:DoCmd.OpenReport“教师信息”面向对象程序设计的基本概念(续)2、事件和事件过程事件是Access窗体或报表及其上的控件等对象可以“辨识”的动作。如:单击鼠标,打开窗体和报表等。在ACCESS数据库系统中可以通过两种方式来处理窗体、报表或控件的事件响应:使用宏对象和编写VBA代码,完成指定动作,这样的代码过程,也称为事件响应过程。例:单击“test”按钮,弹出下图所示对话框!进入VBA编程环境—VBE打开窗体或报表,单击工具栏上“代码”工具按钮进入。定位到控件上,打开属性窗口,选中某个事件,设置属性为“事件过程”,点击“…”按钮后选择“代码生成器”进入。新建模块。打开一个已有的标准模块。在数据库对象窗体中,单击“工具”菜单中“宏”级联菜单的“VisualBasic编辑器”选项即可进入。提示:进入VBE环境后,可以使用ALT+F11组合键在数据库窗口和VBE之间切换。模块和过程的创建1.新建模块模块由过程组成,而过程由程序员编写程序形成。

[例1]创建一个名为“模块入门”的新模块

保存为“模块入门”

模块和过程的创建(续)2.过程过程由VBA语句组成,是一段相对独立的代码。过程与过程之间相互隔离,系统不会从一个过程自动执行到另一个过程,但一个过程可以通过调用执行另一个过程。过程不是Access的一个独立对象,不能单独保存,只能存在于模块中。过程以Sub<过程名>()的形式开头(圆括号内放置该过程被调用时需接受的参数),以EndSub结束。模块和过程的创建(续)3.新建过程[例2]在“模块入门”模块中创建一个Hello过程

用户输入

执行过程双击

VBA程序的语句定义(声明)语句执行语句条件结构顺序结构循环结构VBA语句VBA程序的语句(续)一、程序语句书写1、语句书写规定可以用续行符“下划线”_将语句连续写在下一行。可以使用“冒号”:将几个语句分隔写在一行中。当输入一行语句并按下回车后,该行代码若红色显示,表示有误。提示:模块的内容是由VBA语言编写的代码。2、注释语句(两种方式):remdocmd.openreport“学生”‘docmd.openreport“学生”VBA程序的语句(续)二、声明语句声明语句用于命名和定义常量、变量、数组和过程。如:constPI=3.14159DimIasintegerVBA程序的语句(续)三、赋值语句1、[let]变量名=值或表达式(将右边的值赋给左边)例如:message=“hello”2、DimtxtageasintegerTxtage=21例如:Subtest()DimaAsIntegera=21.3MsgBoxaEndSubVBA程序的语句(续)四、标号或goto语句转到某一条语句上。如:gotoAA…AA:…建议避免使用标号,标号一般系统用在出错处理时。如:onerrorgoto标号‘跳转到标号处继续执行onerrorgoto0‘关闭错误处理onerrorresumenext‘忽略错误继续执行

数据类型、常量、变量与表达式1.VBA的数据类型

数据类型、常量、变量与表达式(续)2.标识符标识符:程序中常量、变量、过程等对象的名字VBA标识符规定:第一个字符必须是字母包含的字符数不超过255个不得与VBA的关键字同名,如不能使用Sub、For等不能使用下列字符:!&$#(空格)从增强程序可读性角度出发,标识符应使人望文生义,了解其代表的内涵数据类型、常量、变量与表达式(续)3.常量

常量:VBA在运行时其值始终保持不变的量字符串常量放在一对"内,日期/时间型常量放在一对#内。如"中国"、#9/1/2005#等。符号常量:用标识符保存一个常量值使用Const语句定义符号常量,如

ConstPai=3.141569

ConstTermBeginDate=#9/1/2005#数据类型、常量、变量与表达式(续)4.变量

变量:程序运行期间值可以改变的量

变量在使用前应该用Dim语句进行声明Dim<变量1>As<类型1>[,<变量2>As<类型2>[,...]]DimStudentNameAsStringDimGradeAsInteger,AvgGradeAsSingleDimPassedAsBoolean,ExamDateAsDate默认情况下,变量可以不经声明即可使用,该变量被自动声明为Variant类型(变体型)数据类型、常量、变量与表达式(续)强制实现变量先定义后使用:在代码窗口中执行“工具”/“选项”命令

此后新创建的模块中,窗口顶端自动出现:OptionExplicit

数据类型、常量、变量与表达式(续)5.运算符

算术运算符:-(取负)、^、*、/、\、Mod、+、-关系运算符:>、>=、=、<=、<、<>(不等于)其值为一个布尔量(True或False)

连接运算符:+、&

其中,“+”用于连接字符串,“&”可将几个不同类型的值连接成一个字符串。逻辑运算符:Not、And、Or、Xor、Eqv、Imp数据类型、常量、变量与表达式(续)[例3]输出当天日期及距2008年元旦的天数在“模块入门”模块中添加如下Today()过程:运行结果SubToday()MsgBox"今天的日期是"&Date&",距2008年1月1日还有"&(#1/1/2008#-Date)&"天"EndSub数据类型、常量、变量与表达式(续)6.表达式表达式:用运算符将常量、变量、函数等连接起来的式子,书写在一行上。

表达式可分为:算术表达式,如Count=Count+1关系表达式,如C<>20逻辑表达式,如Age<=5OrAge>=60→(-b+Sqr(b^2-4*a*c))/(2*a)VBA的常用内部函数

内部函数(标准函数)的调用格式:函数名(参数)例如,求Sin(30°)VBA表达式为:Sin(3.14*30/180)根据函数返回值的类型,可以将函数分为:数值型函数字符串函数日期/时间函数类型转换函数VBA的常用内部函数(续)

[例4]求8x2-10x-75=0的两个实根运行结果数据输入、输出1.数据输入函数

InputBox()

InputBox(Prompt[,Title][,Default][,Xpos][,Ypos])说明:Prompt参数必不可少,用于显示输入提示文本Title参数用于指定对话框标题,缺省标题为

“MicrosoftofficeAcces”Default参数为对话框提供一个默认值Xpos、Ypos参数决定对话框出现在屏幕上的位置,缺省时出现在屏幕中央

数据输入、输出(续)[例5]默认为18岁

数据输入、输出(续)InputBox()函数返回值的类型由接受返回值变量的类型决定。例如,D=InputBox("测试",,1)D为整型变量时,D输出的是默认数值1;D为日期型变量时,D输出的是默认日期

1899-12-31D为Boolean变量时,D输出的默认值为True数据输入、输出(续)2.MsgBox()函数

MsgBox(Prompt[,Buttons][,Title])

说明:Prompt参数必不可少,用于输出结果或提示性文本Buttons是一个或一组按钮,缺省为一个“确定”按钮Title参数用于指定消息对话框标题,缺省为

“MicrosoftofficeAcces”数据输入、输出(续)[例6]

运行数据输入、输出(续)3.Debug窗口(“立即窗口”)[例7]视图数据的输入、输出

[例8]运行结果

调试工具的使用

继续中断重新设置切换断点逐语句逐过程快速监视监视窗口立即窗口本地窗口跳出“立即”窗口:用来检测有问题的或新编写的代码。一般使用Debug.Print变量名来观察变量值。“监视”窗口:用来显示被监视的表达式值。可监视多个表达式。必须先添加“监视表达式”和“监视类型”。“本地”窗口:用来显示当前过程中所有变量的值。当程序的执行从一个过程切换到另一个过程时,“本地”窗口的内容会发生改变,它只反映当前过程中可用的变量。8.3选择语句8.3.1If…Then…语句8.3.2If…Then…Else…语句8.3.3块状选择语句8.3.4选择语句嵌套8.3.5SelectCase语句8.3.1If…Then…语句

格式:If<关系表达式或逻辑表达式>Then<语句>

关系表达式或逻辑表达式成立时执行Then后的语句,否则直接执行If的下一条语句。<语句>可以一条语句,也可以是若干条用冒号“:”隔开的VBA语句组。8.3.1If…Then…语句(续)

【例】如果学生的分数在60分以上,定为“及格”,否则定为“不及格”。

Substumark1()DimMarkAsIntegerMark=Val(InputBox("请输入学生成绩"))IfMark>=60ThenMsgBox("及格")ElseMsgBox("不及格")EndIfEndsub8.3.1If…Then…语句(续)[例9]随机出一道两位数加法题让小学生回答Subtest()DimAAsInteger,BAsInteger,SumAsIntegerRandomizeTimerA=10+Rnd*89:B=10+Rnd*89Sum=InputBox(A&"+"&B&"=?","两位数加法")IfSum=A+BThenMsgBox"答案正确!"IfSum<>A+BThenMsgBox"答错了!正确答案是"&A+BEndSub判断变量X是否为不小于10的整数:

IfX>=10andX=Int(X)Then...8.3.2If…Then…Else…语句

格式:

If<关系或逻辑表达式>Then<语句1>Else<语句2>

If后的表达式成立时执行Then后的语句,不成立时执行Else后的语句;然后程序继续执行If后的其他语句。

IfSum=A+BThenMsgBox"答案正确!"IfSum<>A+BThenMsgBox"答错了!正确答案是"&A+BIfSum=A+BThenMsgBox"答案正确!"ElseMsgBox"答错了!正确答案是"&A+B等价8.3.2If…Then…Else…语句

[例10]

SubPassed()DimGradeAsIntegerGrade=InputBox("请输入考试分数:")IfGrade>=60ThenMsgBox("合格")ElseMsgBox("不合格")EndSub本例的If语句也可改写成:IfGrade<60ThenMsgBox("不合格")ElseMsgBox("合格")

8.3.3块状选择语句

格式:If<关系或逻辑表达式>Then<语句组>EndIf或If<关系或逻辑表达式>Then<语句组1>Else<语句组2>EndIfIfGrade>=60ThenMsgBox("合格")ElseMsgBox("不合格")EndIf注意:Then后不能有其他语句(单引号引导的注释语句除外)

8.3.4选择语句嵌套

[例11]SubGrade()DimGradeAsInteger,EvaluAsStringGrade=InputBox("请输入考试分数:")

IfGrade<60ThenEvalu="不合格"

ElseIfGrade<90ThenEvalu="合格"

ElseEvalu="优秀"

EndIfMsgBoxGrade&"分的等级为"&EvaluEndSubElseIf之间没有空格8.3.4选择语句嵌套

指出下面条件语句中隐含的错误:

IfGrade<60ThenEvalu="不合格"IfGrade<90ThenEvalu="合格"ElseEvalu="优秀"EndIf8.3.5SelectCase语句SelectCase语句是多分支选择语句,格式:SelectCase<测试表达式>Case<表达式1><语句1>Case<表达式2><语句2>…[CaseElse<语句n+1>]EndSelect

当测试表达式的值满足某个表达式时,程序就执行该语句。如果没有一个表达式的值能满足测试表达式,则执行CaseElse后的语句。8.3.5SelectCase语句[例12]

SubGrade1()DimGradeAsInteger,EvaluAsStringGrade=InputBox("请输入考试分数:")

SelectCaseGradeCase100:Evalu="满分"Case90To99:Evalu="优秀"Case80To89:Evalu="良好"Case70To79:Evalu="中"Case60To69:Evalu="合格"CaseIs<60:Evalu="不合格"CaseElse:Evalu="数据错误"EndSelectMsgBoxGrade&"分的等级为"&EvaluEndSub8.3.5SelectCase语句说明:测试表达式不一定是关系表达式或逻辑表达式,可以是任意类型,但Case子句中的表达式类型必须与之相一致。如果Case子句中的表达式是一个常量,则该常量直接写在Case之后,如Case100。如果Case子句后的表达式是一个范围,可用To从小到大指定,如Case90To99、Case“A”To“Z”;或者使用Is<关系运算符><表达式>如,CaseIs>3And<88.4循环语句VBA提供了4类循环语句:

For...Next循环、DoWhile...Loop循环、

ForEach...Next循环、While...End循环最常用的是For...Next和DoWhile...Loop循环8.4.1For...Next循环8.4.2DoWhile...Loop循环8.4.3双重循环和多重循环为什么需要循环程序设计中,常常有这样一种问题:计算和处理方法完全一样,而每次使用的数据都按照一定的规律进行改变。如计算1+2+3+…+10=?si从1、2、3...到10将I的只把i的每个值都加起来计算1+2+3+…+10=?①0+1=1②1+2=3③3+3=6④6+4=10⑤10+5=15……⑩45+10=558.4.1For...Next循环

For...Next循环一般用于循环次数已知的过程语法格式:For<循环变量>=初值To终值[Step<步长值>][循环体]Next[循环变量]注释:①“step步长“缺省时,默认为”step1”②“循环变量”缺省时,默认为For后面设置的循环变量。求1+2+…+10Subsum()S=0Fori=1to10step1s=s+i‘将目前s的值加上i后,再赋给sNextEndsub执行次数:10次思考:如何求1+3+5+….99如何求2+4+8+100执行过程循环前:s=0循环开始:①i=1,s=s+i=0+1=1②i=2,s=s+i=1+2=3③i=3,s=s+i=3+3=6④i=4,s=s+i=6+4=10⑤i=5,s=s+i=10+5=15…i=10,s=s+i=45+10=55例:分析以下程序段,循环结束后k为?,变量s为?suba()Constpi=3.14T=F(5)dima(3,5)asintegerS=0fork=1to10step2S=S+1k=k*2nextkendsub①K=1,s=s+1=1,k=k*2=2,k=k+2=4②k=4,s=s+1=2,k=k*2=8,k=k+2=10③k=10,s=s+1=3,k=k*2=16,k=k+2=18④k=10,s=s+1=3,k=k*2=16,k=k+2=18⑤k=18>10,循环结束8.4.1For...Next循环

[例13]编写Even()过程,输出10~20的所有偶数相邻偶数相差2

思考:退出循环时,I的值是多少?为什么?

8.4.1For...Next循环

[例14]思考:可否将循环修改为:ForI=10To1step-1?为什么?

用随机函数模拟入学分数分值在300~399之间

8.4.1For...Next循环

[例15]通过键盘输入一个自然数X,判断它是否为质数质数:除1以外,只能被1和自己所整除的自然数循环变量值超过终值后“自然”终止

Dowhile条件式‘条件为真时执行语句,循环体‘为假时结束循环

loopdo…while/until…loopDountil条件式‘条件为真时结束循环,循环体‘为假时执行语句[条件语句序列exitdo结束条件语句序列]loop当型循环直到型循环用dowhile…loop

用dountil…loop

DimiasintegerDimsasintegeri=1S=0DoWhilei<=10s=s+ii=i+1loopDimiasintegerDimsasintegeri=1S=0Dountili>10s=s+ii=i+1loop重做1+2+..+108.4.2DoWhile...Loop循环

DoWhile...Loop通常用于循环次数未知的过程语法格式:DoWhile<循环条件表达式>[循环体][条件语句序列exitdo结束条件语句序列]Loop

循环体中必须有“破坏”循环条件成立的语句,以免“死循环”强制终止循环的语句是ExitDo,跳出循环后执行Loop后的语句。

8.4.2DoWhile...Loop循环

[例16]

-1为结束输入的标志

8.4.2DoWhile...Loop循环

例16也可使用For...Next循环语句:将循环终值设为一个足够大的数,一旦输入-1即跳出循环。8.4.3双重循环和多重循环

双重循环:循环语句的循环体本身也是一个循环对于一个m行n列的表格来说,常常需要用双重循环才能访问到表中的每一个数据。对于一个外层循环有m次、内层循环有n次的双重循环,其核心循环体将重复执行m×n次。多重循环指三重循环或更多层次嵌套的循环8.4.3双重循环和多重循环

[例17]在立即窗口中输出10以内的平方根表Format()函数是打印项的格式函数,"0.00"表示小数保留两位,同时在没有整数部分、小数部分时用0填补。

8.4.3双重循环和多重循环

[例18]求Sum,直到某项的绝对值小于10-4

8.5数组8.8.1数组概念8.8.2一维数组8.8.3二维数组

8.8.1数组概念数组是一种数据存储结构,它用一个标识符保存若干个数据,用不同的下标予以区分。

数组具有以下特性(数组中的每个数据称为元素):每个元素类型相同,占用同样大小的存储空间数组中的元素在内存中连续存放通过下标可访问数组中的每个元素。下标的类型可以是整数,常量、变量或算术表达式。数组分为一维数组、二维数组和多维数组

Array(0)=17

Array(1)=19

……8.8.2一维数组一维数组中的元素呈直线状排列,每个下标对应一个元素。数组在使用前必须先行定义,语法格式是:

Dim<数组名>([<下界>]To上界)As数据类型若省略下标下界,则数组的最小下标为0例如:

DimA(10)AsDouble

A数组共有11个元素(下标的起止范围是0~10)

8.8.2一维数组说明:定义数组时,下标的下界值和上界值必须是常量或符号常量,不能使用变量。引用数组元素时,下标不得超出所定义的下界和上界,否则程序的执行将被中断,同时系统报错。使用数组时,用LBound()和UBound()函数可得到该数组下标的下界和上界值。8.8.3二维数组二维数组中数据排列呈平面状,可保存一个二维表的信息。数组元素使用行下标和列下标定位,定义格式:Dim<数组名>([<下界>To]上界,[<下界>To]上界)As数据类型如果省略下标的下界值,则下界值默认为0例如,DimA(3,4)AsInteger,声明的A数组有45=20个元素。二维数组的操作通常需要与双重循环相结合。8.6过程8.6.1Sub过程8.6.2Function过程8.6.3过程调用中的参数传递方式8.6.4数组参数的传递方法

8.6.1Sub过程VBA模块的过程可分为Sub过程和Function过程两大类。区别在于前者没有返回值而后者有。1.Sub过程的语法格式[P

温馨提示

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

评论

0/150

提交评论