VBA程序设计初步.ppt

上传人:小飞机 文档编号:5451872 上传时间:2023-07-08 格式:PPT 页数:78 大小:477.50KB
返回 下载 相关 举报
VBA程序设计初步.ppt_第1页
第1页 / 共78页
VBA程序设计初步.ppt_第2页
第2页 / 共78页
VBA程序设计初步.ppt_第3页
第3页 / 共78页
VBA程序设计初步.ppt_第4页
第4页 / 共78页
VBA程序设计初步.ppt_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《VBA程序设计初步.ppt》由会员分享,可在线阅读,更多相关《VBA程序设计初步.ppt(78页珍藏版)》请在三一办公上搜索。

1、1,2023/7/8,第7章 VBA程序设计初步,3,2023/7/8,要点,7.1 VBA概述 7.2 对象模型 7.3 数据类型 7.4 程序语句 7.5 数组,4,2023/7/8,7.1 VBA 概述,1、VBA简介 VBA(Visual Basic Application)是Microsoft Office系列软件的内置编程语言,VBA的语法与独立运行的Visual Basic编程语言互相兼容。它使得在Microsoft Office系列软件中快速开发应用程序更加容易,且可以完成特殊的、复杂的操作。,5,2023/7/8,7.1 VBA 概述,1、VBA简介 VBA 是面向对象的程序

2、设计语言。面向对象程序设计是一种以对象为基础,以事件来驱动对象的程序设计方法。,6,2023/7/8,7.1 VBA 概述,1、VBA简介(续)VBA和常用的程序开发语言VB非常相似,二者来自同一种编程语言,即BASIC。VBA与VB所包含的对象级是相同的,也就是说,对于VB所支持对象的多数属性和方法,VBA也同样支持。但两者并非完全一致,在许多语法和功能上有所不同,VBA从VB中获得了主要的语法结构,另外又加上Office中的一些功能。,7,2023/7/8,2、VBA编程环境,Office中提供的VBA开发界面称为VBE(Visual Basic Editor),即可视化的Basic 编程

3、环境。在Access中,打开VBE窗口的方法有多种。在模块对象窗口单击“新建”按钮,或打开一个已存在的模块,都会打开VBE窗口。选择工具菜单中“宏”子菜单的“Visual Basic编辑器”命令。使用Alt+F11快捷键打开VBE界面,或切换数据库窗口和VBE窗口。,8,2023/7/8,2、VBA编程环境,9,2023/7/8,工具栏 工程资源管理器窗口 属性窗口 代码窗口,10,2023/7/8,7.2 对象模型,1、Access对象 Access中的对象大多都有父子关系,有根对象,也有子对象(包括子对象的子对象等等)。在VBA代码中访问对象,必须从根对象开始,逐步取其子对象,直到需要访问

4、的对象为止。,11,2023/7/8,Access根对象有6个,如表所示:,12,2023/7/8,Forms是一个集合对象,包括当前数据库中所有打开的窗体对象。引用窗体对象的语法为 Forms!formname,其中的formname 是窗体名每个Form对象都有一个 Controls 集合例如要引用窗体Form_窗体1上的控件Text1,可以显式或隐式地引用Controls集合。Forms!Form_窗体1!Text1 隐式引用Forms!Form_窗体1.Controls!Text1 显示引用,13,2023/7/8,2、对象的属性 在程序代码中,通过赋值的方式来设置对象的属性。格式为:

5、对象.属性=属性值 例如:Label1.Caption=“学生成绩表”,14,2023/7/8,3、对象的事件 事件是发生在对象上的事情或消息。系统为每个对象预先定义了一系列的事件,如:Click(单击)、DblClick(双击)等等。例如:按下按钮Command1时,文本框Text1的字体改变。Private Sub Command1_Click()Text1.FontSize=14 End Sub,15,2023/7/8,4、对象的方法,方法是一些系统封装起来的通用过程和函数,以方便用户的调用。对象方法的调用格式为:对象.方法 参数名表 例如:在立即窗口输出2+3的结果 Debug.Pri

6、nt 2+3Sub q1()定义了一个宏,名为”q1”.Debug.Print 2+3End Sub,16,2023/7/8,4、对象的方法,除窗体、控件的SetFocus(获得控制焦点)、Requery(更新数据)等方法外,用得最多的是DoCmd对象的一些方法。使用DoCmd对象的方法,可以在VBA中运行Access的操作,如执行打开窗体(OpenForm)、关闭窗体(Close)、SelectObject(指定数据库对象)等操作。例如:打开”学生资料浏览”窗体的语句是 DoCmd.OpenForm”学生资料浏览”,17,2023/7/8,例7-2-1:制作一个显示欢迎信息的窗体。(P169

7、)新建一个窗体,放置两个按钮和一个文本框。,Option Compare DatabasePrivate Sub Command1_Click()Me.Text1.SetFocus Me.Text1.Text=您好!欢迎您学习VBA“End Sub,Me.Text1.Text=End SubPrivate Sub Form_Load()Me.Caption=欢迎End Sub,在”工具”菜单的”选项”的“编辑器格式”中,调整字体,18,2023/7/8,7.3 数据类型,1、变量 变量是在程序运行时发生变化的量。作用:保存计算结果 设置属性 指定方法的参数 在过程间传递数据,19,2023/7

8、/8,7.3 数据类型,变量名是内存中存放数据的缓冲区的名字。在使用变量前必须先声明,通知VBA变量的名字和数据类型。变量命名应注意:变量名必须以字母开头,其最大长度为255。变量名不能包含下列字符:+/*!.$&等。变量名不能包含空格,可以包含下划线。不能包括VBA中的关键字(在程序中有特定含义的词)、运算符Or内置函数名Len、Abs 等等。,20,2023/7/8,变量的类型(P170),21,2023/7/8,声明变量 作用:指定变量的数据类型,变量的适用范围(作用域)。显式声明变量:可以在变量被使用之前,在代码的任意位置进行声明。最好在程序的开始位置声明所有变量。可以用Dim语句声明

9、变量,其格式为:Dim 变量名 As 类型 例如:Dim x As Integer 即 Dim x%Dim x1 As Integer,x2 As Integer,x3 As Single隐式声明变量:使用变量前不对变量类型进行明确声明,系统会默认为 Variant 数据类型。,22,2023/7/8,2、常量,常量在程序运行期间,其值保持不变。常量可以是数字、字符串,也可以是其他值。每个应用程序都包含一组常量,用户也可以定义新常量。定义了常量,就可以在程序中使用它,不必再用实际值。VBA支持两种类型的常量,即内置常量和用户定义的常量。,23,2023/7/8,2、常量,用户自定义常量在程序中

10、经常用到某个常数值,或为了程序的阅读或修改方便。声明常量使用Const 关键字,其格式为:Const 常量名 As 类型=表达式 例如:Const PI=3.141593,24,2023/7/8,3、运算符及优先级,算术运算+(加)、-(减、取负)、*(乘)、/(除)、Mod(取模)、(整除)、(乘方)连接运算符&,25,2023/7/8,3、运算符及优先级,关系运算符=(等于)、(不等于)、(大于)、=(大于等于)、=(小于等于)逻辑运算符 Imp(包含)、Eqv(等价于)、Xor(异或)、Or(或)、And(与)、Not(非),26,2023/7/8,3、运算符及优先级,优先级(P173)

11、算术运算符 连接运算符 关系运算符 逻辑运算符,27,2023/7/8,4、表达式,定义:表达式由运算符、数值和标识符组成。(P172)表达式书写规则:(1)每个符号占一格,所有符号必须并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:X3 写成 X3,X1+X2 写成 X1+X2(2)所有运算符都不能省略。例如:2X 写成 2*X,28,2023/7/8,4、表达式,(3)所有括号都用小括号,成对出现。例如:5X+2(Y+Z)必须写成 5*(X+(Y+Z)(4)数学表达式中的有些符号需要修改。例如:2R 可改写为 2*PI*R 例如:数学表达式 写成VBA表达式为:(-b+sqr(

12、b2-4*a*c)/(2*a),29,2023/7/8,5、内置函数,VBA提供的内置函数按其功能可分为数学函数、字符串函数、日期函数、转换函数等。(常用内置函数 见P174 表7.3.3),30,2023/7/8,1 MsgBox 函数MsgBox(提示,按钮,标题)例7-3-1:(P175)Private Sub Form_Load()Dim IntResponse As Integer,StrTitle As StringStrTitle=“MsgBox 示例IntResponse=MsgBox(“停止处理!,19,StrTitle)If IntResponse=vbYes Then M

13、sgBox“你按下的是”确认”键.Else MsgBox“你按下的不是”确认”键.End IfEnd Sub,31,2023/7/8,2 InputBox函数 InputBox(提示,标题,默认,X坐标位置,Y坐标位置)例7-3-2:Private Sub Form_Load()Dim StrMsg As String,StrTitle As String,StrName As StringStrMsg=请输入你的名字:StrTitle=InputBox示例StrName=InputBox(StrMsg,StrTitle,李四)End Sub,32,2023/7/8,7.4 程序语句,VBA中

14、的语句是执行具体操作的指令,每个语句以 Enter(回车)结束。语句由VBA关键字、属性、函数、运算符以及VBE可以识别的指令符号组合而成。,33,2023/7/8,7.4 程序语句,书写程序语句时遵循的构造规则称为语法。缺省情况下,输入语句时,VBA将自动对输入的内容进行语法检查,发现错误会弹出一个信息框提示出错的原因。VBA按约定对语句进行简单的格式化处理,例如关键字、函数的第一个字母自动变为大写。,34,2023/7/8,7.4 程序语句,书写程序的语法规则 一般情况下,一行输入一个语句。允许使用复合语句,即把几个语句放在一行中,各语句间用冒号“:”分隔。一个语句也可分若干行书写,在要续

15、行的行尾加入续行符(空格和下划线)。(见P176),35,2023/7/8,7.4 程序语句,VBA具有结构化程序设计的三种基本结构:顺序结构 选择结构 循环结构,36,2023/7/8,1、赋值语句,赋值语句是程序语言中最基本的语句,其格式为:=例如:Total=100 ReadOut=Good Morning!Text1.Text=请输入您的姓名:A=35+Total/2,37,2023/7/8,1、赋值语句,注意(P177)赋值语句兼有计算与赋值的双重功能。右边表达式类型与左边变量类型不同时,要进行类型的转换。赋值号左边只能是变量,不能是常量或表达式。,38,2023/7/8,1、赋值语

16、句,不能在一条赋值语句中,同时给多个变量赋值。反例:Dim x%,y%,z%:x=y=z=50 运行结果为 x=0 因为系统只将最左边的“=”作为赋值符号,另外两个“=”当作关系运算符。(y,z 默认初值为 0)则 y=z比较,结果为真:-1,而-1与 50比较,结果为假:0用 With 语句 可以给一个对象的多个属性同时赋值。(P177 例7-4-1),39,2023/7/8,40,2023/7/8,41,2023/7/8,42,2023/7/8,例7-4-3:某商场促销采用购物打折的办法,顾客一次购物 在1000元以上者,按八折优惠;在500元以上,但不足1000元者,按八五折优惠;在30

17、0元以上,但不足500元者,按九折优惠;在100元以上,但不足300元者,按九五折优惠;不足100元者,没有优惠。(P179)则计算折扣的程序代码为:Dim a As Single,b As Single a为原价,b为折扣后应付款If a=1000 Then b=0.8*aElseIf a=500 Then b=0.85*a ElseIf a=300 Then b=0.9*a,ElseIf a=100 Then b=0.95*aElse b=aEnd If,43,2023/7/8,44,2023/7/8,3、条件语句二 Select Case 语句,例7-4-5Select Case a C

18、ase Is=1000 b=0.8*a Case Is=500 b=0.85*a Case Is=300 b=0.9*aCase Is=100 b=0.95*a Case Else b=a End Select,45,2023/7/8,在实际中遇到操作过程不太复杂,但需要重复相同处理的问题,比如,统计本单位所有人员的工资,求全班同学各科的平均成绩等等。如果用顺序结构来处理,是一个非常乏味且冗长的程序。例如:求自然数 1100 的和,用顺序结构,程序如下:,4、循环语句,46,2023/7/8,Private Sub Form_Click()Dim s&,x%s=0 x=1 s=s+x x=x+

19、1 s=s+x x=x+1 s=s+x x=x+1 x的值累加到99 s=s+xEnd Sub,4、循环语句,解决这类问题最好用循环语句。循环就是重复地执行同一组语句。,47,2023/7/8,新建一个窗体,添加一个文本框,名称为 text 0。在窗体上添加如下代码:Private Sub Form_Click()Dim s&,x%s=0 For x=1 To 99 Step 1 s=s+x Next x text 0.value=“自然数 1100 的和=”&sEnd Sub,4、循环语句,48,2023/7/8,VBA提供两种不同风格的循环语句:For Next 语句Do Loop 语句循

20、环结构适合处理过程相同、数据相关,但具体值不同的问题。,4、循环语句,49,2023/7/8,For循环的一般格式:For 循环变量=初值 To 终值 Step 步长 循环体 Next 循环变量 参见下页图示,4、循环语句一 For循环,例:For n=1 To 10s=s+nNext n,50,2023/7/8,4、循环语句一 For循环,执行过程 1)系统将初值赋给循环变量,并自动记下终值和步长。2)检查循环变量的值是否超过终值。如果超过就结束循环,执行 Next 后面的语句;否则,执行一次循环体。3)执行 Next 语句,将循环变量增加一个步长值 再赋给循环变量,转到(2)继续执行。,5

21、1,2023/7/8,说明 循环变量:或循环控制变量,必须为数值型 初值、终值:数值型,可以是数值表达式。步长:循环变量的增量,是数值表达式。其值为正,初值应小于终值;若为负,初值应大于终值。步长不能是0。如果步长是1,Step 1可略去不写。循环体:在For和Next之间的语句序列。Next后面的循环变量与For语句中的循环变量必须相同。,4、循环语句一 For循环,52,2023/7/8,注意:For 语句和 Next 语句必须成对出现,缺一不可,且 For 语句必须在 Next 语句之前。循环次数由循环的初值、终值和步长确定,计算公式为:循环次数=Int(终值初值)/步长)+1,4、循环

22、语句一 For循环,53,2023/7/8,【例】求 N!(N为自然数)。分析:由阶乘的定义N!=1*2*(N-2)*(N-1)*N=(N-1)!*N即自然数的阶乘,等于该自然数与前一个自然数阶乘的乘积。,4、循环语句一 For循环,54,2023/7/8,程序如下:Private Sub cmd1_Click()Dim I As Integer Dim f As Long Dim n As Integer n=InputBox(输入一个自然数:,输入提示,10)f=1 For I=1 To n f=f*I Next I label1.Caption=n&的阶乘是&fEnd Sub,4、循环语

23、句一 For循环,55,2023/7/8,For循环需要预先知道循环次数。对于不能预先确定循环次数,只知道控制条件的情况,可以使用 Do循环。DoLoop 循环可以根据需要决定是条件满足时执行循环体,还是一直执行循环体直到条件满足,具有很强的灵活性。,5、循环语句二 DoLoop循环语句,56,2023/7/8,形式1:Do While|Until 语句块 Exit Do 语句块 Loop,57,2023/7/8,形式2:Do 语句块 Exit Do 语句块Loop While|Until,58,2023/7/8,例:以下循环的执行次数是 _。k=0 do while k=2 k=k+1 lo

24、op,例:以下循环的执行次数是 _。k=0 do until k=2 k=k+1 loop,59,2023/7/8,例:阅读程序,结果是_。n=0 do n=n+1 debug.print n loop until n2,例:阅读程序,结果是_。n=0 do n=n+1 debug.print n loop while n2,60,2023/7/8,注意:Do 循环中,While语句指定循环开始的条件(当)。Until语句指定循环结束的条件(直到)。Do循环本身不能修改循环条件,必须在循环体内设置相应语句(如:n=n+1),使得整个循环趋于结束,以避免死循环。能用ForNext循环编写的程序,

25、都可以用Do循环来实现。反之,则不尽然。,61,2023/7/8,循环的嵌套,For循环和Do循环都可以嵌套,且可以互相嵌套。但必须满足以下条件:外循环必须完全包含内循环,不能交叉。外循环变量与内循环变量不能同名。例:i=1:j=1:s=0:n=0 For i=1 to 3For j=1 to 4 s=i*j:n=n+sNext Next,62,2023/7/8,循环的强制退出,在某些情况下,为了减少循环次数或便于程序调试,需要提前强制退出循环。VBA为ForNext和DoLoop循环语句提供了相应的强制退出循环的语句:,63,2023/7/8,1Exit For 该语句用于ForNext循环

26、,在循环体中可以出现一次或多次。当系统执行到该语句时,就强制退出当前循环。常用格式是:If 条件 Then Exit For 即当循环执行过程中满足某个条件时,就结束循环。,循环的强制退出,64,2023/7/8,2Exit Do 该语句用于DoLoop循环,具体用法同Exit For 一样。,循环的强制退出,65,2023/7/8,7.5 数组,1、数组的定义 数组是一组相同类型变量的集合。必须先声明后使用。在程序中使用数组的好处是用一个数据名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素。数组的形式:数组名(下标1,下标2)例如:name(30)或 A(2,3),66,2023/7

27、/8,7.5 数组,数组分为两类:静态(定长)数组 动态(可变长)数组静态数组的声明 Dim 数组名(下标1,下标2)As 数据类型例如:Dim S(10)As SingleDim Su(3,4)As Integer,Sd(1 To 3,3 To 4)As Integer 数组中元素的排列(见P185 表),67,2023/7/8,说明:声明了数组名、维数、大小、类型 维数:几个下标为几维数组。下标:必须为常数。下界 To 上界,省略下界为0。每一维大小:上界下界+1 数组大小:每一维大小的乘积 例1:Dim mark(1 to 100)As Integer,68,2023/7/8,例2:Di

28、m lArray(0 To 3,0 To 4)As Long 数组 lArray 共有 45个元素等价于:Dim lArray(3,4)As Long,69,2023/7/8,注意:数组声明中的下标说明了数组的整体,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dim x(10)As Integer 声明 x 数组有11个元素 而 x(10)=100 对 x()数组中下标为10的元素赋值,70,2023/7/8,动态数组的声明 动态数组在声明数组时,不指定数组中的元素个数。使用它时,再按需要用 ReDim 语句指定数组的大小。ReDim语句的

29、格式为:ReDim 数组名(下标1,下标2)As 数据类型 例如:声明数组时,不指定元素个数。Dim S()As SingleDim Score()As Single,71,2023/7/8,例7-5-1:使用动态数组。(P185)Option Compare DatabaseDim Stname()As String,Strecord()As IntegerPrivate Sub Command2_Click()n=50i=3ReDim Stname(n)ReDim Strecord(1 To i,n)End Sub,72,2023/7/8,2、数组处理,定义数组时,用数组名表示该数组的整体

30、。例如:Dim A(10)表示数组中有10个元素。在具体操作中,对数组内的每一个元素进行调用和处理。例如:A(6)=23 表示把整数23 赋值给第6个元素。n=A(6)表示把数组中第6个元素的值赋给变量n。,73,2023/7/8,2、数组处理,用循环给数组的元素赋初值:For i=1 To 10 A(i)=0 Next i 或 For i=1 To 10 A(i)=i Next i,74,2023/7/8,例7-5-2:从键盘上输入10个任意整数,按由小到大的顺序显示出来。(P186)代码为:,Dim A(10)As IntegerFor i=1 To 10 A(i)=InputBox(请输

31、入第&Str(i)&个数据:,排序数据)NextFor i=1 To 9 排序 For j=i+1 To 10 If A(i)A(j)Then t=A(i):A(i)=A(j):A(j)=t,End If NextNextp=Str(A(1)For i=2 To 10 p=p&,&Str(A(i)NextLabel1.Caption=Ltrim(p),75,2023/7/8,3、自定义数据类型,自定义数据类型是由若干个标准数据类型构造而成的,其定义的方法是:先定义数据类型:使用Type语句声明自定义类型的框架;再定义变量:在Dim语句中用声明过的新类型声明变量。,76,2023/7/8,3、自

32、定义数据类型,Type 语句的格式为:Type 自定义类型名元素名 As 类型 元素名 As 类型End Type,77,2023/7/8,3、自定义数据类型,例7-5-3:定义一个学生基本情况的自定义数据类型。(P187)Private Type studentNum As Integer 学号Nam As String*8 姓名Sex As Boolean 性别Bir As Date 出生年月Gra As String*20 班级End Type,78,2023/7/8,3、自定义数据类型,例7-5-3(续):在声明变量 Stu 时,使用该自定义数据类型。(P187)Dim Stu As student 例7-5-3(续):使用该自定义数据类型变量 Stu 中的某个元素。(P187)Stu.Num=0102030405 为学号赋值Stu.Nam=王婉 为姓名赋值,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号