VBA程序设计基础.docx

上传人:b****8 文档编号:28323284 上传时间:2023-07-10 格式:DOCX 页数:27 大小:640.01KB
下载 相关 举报
VBA程序设计基础.docx_第1页
第1页 / 共27页
VBA程序设计基础.docx_第2页
第2页 / 共27页
VBA程序设计基础.docx_第3页
第3页 / 共27页
VBA程序设计基础.docx_第4页
第4页 / 共27页
VBA程序设计基础.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

VBA程序设计基础.docx

《VBA程序设计基础.docx》由会员分享,可在线阅读,更多相关《VBA程序设计基础.docx(27页珍藏版)》请在冰豆网上搜索。

VBA程序设计基础.docx

VBA程序设计基础

第九章程序设计基础

教学目标:

●理解什么是程序

●掌握程序设计的基本方法

●编写并调试简单的VBA应用程序

●编写简单的事件驱动程序

●会在VBA应用程序中访问数据库

教学过程:

一、程序设计概述

做一件事,计算机可以把它分解为一系列的基本操作步骤,通过程序设计语言的基本语句来完成,这就是程序。

程序设计方法主要有两种:

面向过程的结构化程序设计方法和面向对象的程序设计方法。

前面所学的窗体对象设计就是一种面向对象的设计方法。

在Access中编写程序使用的语言是VisualBasicforApplication,简单VBA。

首先看一下VBA编写的几个简单程序。

例9-1在窗体上放置一个命令按钮和一个文本框,单击命令按钮后在文本框中显示“VBA程序设计”

步骤如下:

1、打开数据库,切换到“窗体”对象下,双击“在设计视图中创建窗体”,

2、添加文本框,在对应的属性窗口“全部”选项卡的第一行设置名称为“文本1”,添加命令按钮,名称为“命令0”

3、打开“按钮”的属性窗口,在“事件”选项卡下的“单击”栏选“事件过程”,单击后面的按钮,进入编辑窗口:

4、在编辑窗口中输入如下程序:

(其实窗口中已有,所以我们只要在中间添加一句

PrivateSub命令0_Click()

文本1.Value=“VBA程序设计”

说明:

1、程序的开头“PrivateSub”和结束“EndSub”是一个固定搭配,表示这是一个过程,程序中的“命令0_Click()”表示这个程序在“命令0”按钮被单击时执行。

2、在编辑窗口已有程序的开头和结尾,所以我们只要输入中间的一句:

文本1.value=“VBA程序设计”

3、注意程序中引用的“命令0”,“文本1”一定要和窗体中的按钮、文本框名称一致。

EndSub

5、关闭程序编辑窗口,切换到窗体视图,则单击命令按钮后,“VBA程序设计”即显示在文本框中。

思考在上面的窗体中再添加一个按钮,单击则清除文本框中显示的文本,应该怎样操作?

例9-2在窗体中有一个命令按钮和两个文本框,用户在第一个文本框中输入一个正整数,当单击该按钮时计算出这个正整数的阶乘,并在第二个文本框中显示计算结果。

步骤:

1、新建一个窗体,拖入两个文本框和一个命令按钮,名称为文本1、文本2、命令0(这三个控件名称后面程序中要引用,所以一定要命名!

2、选中按钮,打开其属性窗口,在“事件”选项下的“单击”一栏,选“事件过程”,单击后面的按钮,输入如下程序:

说明:

1、程序中变量在使用前要先定义,这里计算阶乘,用到的只能是整数,所以定义a、b、c为整型变量。

(见中间程序部分的第一句:

DimaAsInteger)

2、单引号后面的是程序的注释语句,只起说明的作用,程序并不执行它。

不输入这些语句,程序照样正常运行。

(见绿色部分)

3、输入程序时可以用小写字母输入单词,但每一个关键词的第一个字母计算机会自动变成大写。

(见程序中蓝色部分)

4、程序一般一句一行,也可多个句子写在一行,中间用冒号隔开;如果一句太长,需要分成多行,可在上一行的最后加下划线“_”,系统就会把上下两行连在一起做为一个语句。

3、关闭程序编辑窗口,切换到窗体视图,我们输入5,单击“计算”按钮,则会显示120,

(实际上,5!

=1×2×3×4×5,计算结果是120)

二、程序的输入输入出语句

(1)InputBox函数

格式:

InputBox字符串1,[字符串2],[字符串3]

功能:

显示一个输入对话框,等待用户输入信息或按下按钮。

在按钮事件发生后返回键盘输入到文本框中的内容,返回值的类型为文本类型,

说明:

对话框中的提示信息是字符串1,对话框的标题栏是字符串2,字符串3是输入对话框中的默认值。

后两个字符串是可选项,可不选。

例9-3在窗体的命令按钮中分别加入以下代码,单击按钮后即可看出输入对话框的不同。

PrivateSubCommand0_Click()

InputBox"请输入学号","学号输入框","2009"

EndSub

改成下面程序后的输入对话框:

PrivateSubCommand0_Click()

InputBox"请输入学号","学号输入框"

EndSub

改成下面程序后的输入对话框:

PrivateSubCommand0_Click()

InputBox"请输入学号"

EndSub

(2)MsgBox函数

格式:

MsgBox字符串1,[按钮参数],[字符串2]

功能:

出现一个消息框,字符串1为消息框中的提示信息,按钮参数则决定了消息框中按钮的类型(见下面按钮参数表),字符串2为消息框的标题栏上信息。

按钮参数表:

常数

按钮类型

vbOKOnly

0

只显示OK按钮

vbOKCancel

1

显示OK及Cancel按钮

vbYesNoCancel

3

显示Yes、No、Cancel按钮

vbQuestion

32

显示WarningQuery图标

vbExclamation

48

显示WaringMessage图标

vbInformation

64

显示InformationMessage图标

vbDefaultButton1

0

第一个按钮是缺省值

vbDefaultButton2

256

第二个按钮是缺省值

vbDefaultButton3

512

第三个按钮是缺省值

例9-4在窗体上添加一个命令按钮,当单击该按钮后,显示一个对话框:

(1)提示消息为“您确定要退出吗?

”。

(2)包含“确定”和“取消”两个命令按钮以及一个询问图标,默认选择“确定”按钮,(3)对话框的标题栏为“确认退出”

分析:

生成对话框需要用MsgBox函数,包含“确定”和“取消”按钮,对应参数为1(见上表);包含一个询问图标,对应参数为32;默认选择是“确定”按钮(这里的第一个就是“确定”按钮),对应参数是0,根据题目要求对应的语句应为:

MsgBox“您确定要退出吗?

”,1+32+0,“确认退出”

步骤:

1、新建一个窗体,添加一个命令按钮,

2、在命令按钮的属性窗口中切换到“事件”选项下,在“单击”一栏中选“事件过程”,单击这一栏后面的按钮,出现VBA编程窗口,

3、在程序开头和结尾之间添加一句:

MsgBox“您确定要退出吗?

”,1+32+0,“确认退出”,见下图:

4、切换到窗体视图,单击命令按钮,弹出一个消息框,如图:

说明:

1、使用参数进行组合时不能互相矛盾,例如不能同时显示“确定”‘“取消”两个按钮和“是”、“否”、“取消”三个按钮。

2、上面的组合参数可以求和后表示,也可用按钮参数表中对应的常数表示,下面几种形式均可:

MsgBox“您确定要退出吗?

”,1+32+0,“确认退出”

MsgBox“您确定要退出吗?

”,33,“确认退出”

MsgBox“您确定要退出吗?

”,vbOKCancel+vbQuestion+vbDefaultButton1,“确认退出”

3、当用户点击了不同的按钮,我们可以根据按钮的返回值来判定用户选择了哪个按钮,按钮返回值如下表:

MsgBox返回值

常数

选择按钮

vbOK

1

选择了OK

vbCancel

2

选择了Cancel

vbYes

6

选择了Yes

vbNo

7

选择了NO

例9-5在窗体上添加一个命令按钮,当单击该按钮后接受用户输入的三角形三边长,并求出周长后输出

步骤:

1、新建一个窗体,添加一个命令按钮command0

2、

PrivateSubCommand0_Click()

'定义a,b,c,s为单精度变量,a,b,c为三边长,s为周长

DimaAsSingle,bAsSingle,cAsSingle,sAsSingle

'利用输入对话框接受键盘输入的值,并用Val()函数转把字符串转换成数值

a=Val(InputBox("请输入三角形的第一个边长:

"))

b=Val(InputBox("请输入三角形的第二个边长:

"))

c=Val(InputBox("请输入三角形的第三个边长:

"))

s=a+b+c

MsgBox"三角形的周长是:

"&s

EndSub

在命令按钮的属性窗口中为其添加代码:

如图

3、切换到窗体视图,单击命令按钮,在弹出的对话框中依次输入三个值,例如3、4、5

则弹出一个消息框,显示三边长的结果:

三、赋值语句

格式:

变量名=表达式

功能:

把右边表达式的值给左边的变量。

例如x=2+1,x=x+1

说明:

1、变量要先定义才能使用

2、赋值号两边的数值必须兼容,即数据类型尽量一致。

否则容易出错

例如:

DimxasInteger,yasSingle,zasString‘定义x为整数,y为单精度数,z为文本字符

X=3.5

Y=4

Z=”ACCESS”

第二句x定义为整数,却给了个小数3.5,此时x会取4,

第三句y是单精度数,给了整数4,但系统可以转换成4.000再给变量y,所以是合法的。

第四句z是字符变量,所以等式右边只能赋值一个字符串。

3、等号左边只能有一个变量,右边可以是含这个变量的表达式,

例如x=x+1正确,但x+1=x就不正确了。

4、赋值号右边的计算结果必须在左边变量的表示范围之内,否则系统会提示出错,

例如:

DimxasInteger‘定义x为整型变量

x=40000

整型变量x最大只能取值32767,所以40000就超出了整型数据表示的最大值,程序运行到这一句时,系统会提示出错。

5、变量被两次赋值,则新值冲掉旧值,

例如

x=2

x=3

x=x+2

x=?

例9-6在窗体上添加一个命令按钮,当单击该按钮后接受用户输入的长方形的长和宽,计算其面积并输出计算结果。

步骤:

1、新建窗体,并在上面添加一个命令按钮,按钮名称为“命令0”,在按钮上添加代码如下:

PrivateSub命令0_Click()

'定义变量a,b,s为单精度变量,a,b表示长方形的长和宽,S表示面积

DimaAsSingle,bAsSingle,sAsSingle

'通过InputBox函数输入边长,同时将文本型数据转换成数值型

a=Val(InputBox("请输入长方形的第一个边长:

"))

b=Val(InputBox("请输入长方形的第二个边长:

"))

s=a*b

MsgBox"长方形面积为:

"&s

EndSub

2、切换到窗体视图,单击命令按钮,会出现一个输入框,要求你输入长方形的两个边长,输入边长后,单击“确定”按钮,即弹出一个消息框,显示长方形的面积。

注意:

输入程序代码时,要在英文半角下输入,各关键词之间要有空格(“英文半角”输入状态下的空格!

四、顺序结构

在高级程序设计语言中,其语句执行都有一定的先后顺序,总体可以分为顺序结构语句(按语句的先后顺序执行)、条件分支语句(根据条件的成立来确定执行哪一个分支)、循环语句(某个条件成立时反复执行某一段程序)。

顺序结构是最简单的一种结构,这种结构让语句按先后顺序执行,以完成简单的功能。

A=2

B=3

T=A’把A的值放到T中,则T=2

A=B’把B的值放到A中,则A=3

B=T’把T的值给B,则B=2

例9-7在窗体上放一个命令按钮和两个文本框,在两个文本框中分别输入两个不同的值,单击命令按钮后交换这两个文本框中的数据。

分析:

假如a=2,b=3,利用赋值语句总是把等号右边值给左边的特性,借助中间变量,可以让a,b的值互换。

步骤:

1、新建一个窗体,窗体中放两个文本框和一个命令按钮,名称分别是“文本1”、“文本2”、“命令0”,(在属性窗体设置这些控件的名称,在代码程序中引用)

2、

选中命令按钮,在属性窗口中添加这个按钮的代码如下:

3、切换到窗体视图,在文本框中输入两个值,例如2、3,单击命令按钮,可看到文本框中两个数实现了交换。

例9-8在窗体上放一个命令按钮和两个文本框,第一个文本框中输入用分钟表示的时间,单击命令按钮则把这个时间转换成以小时和分钟表示的时间。

步骤:

1、新建一个窗体,放一个命令按钮和两个文本框,定义按钮和文本框的名称为命令0、文本1、文本2

2、选中命令按钮,在属性窗口中切换到“事件”选项下,在“单击”栏选“事件过程”,单击这一栏后面的按钮,输入以下代码:

3、切换到窗体视图下,输入一个分钟数例如:

100,单击命令按钮就可转换成1小时40分钟。

说明:

1、常量的声明:

常量是一种特殊的量,它的值设置后就不能更改或赋于新值,可以在代码中的任何地方使用常量代替实际的值,对于程序中经常出现的常数值且难以记忆无明确意义的数值,使用常量声明可增加代码的可读性和可维护性。

格式:

Const常量名[as类型名]=表达式

2、本程序中用到几种运算,常见的运算见下表:

符号

描述

示例

4*3=12

7/2=3.5

\

整除

7\2=3(只取商的整数部分)

Mod

求余

9Mod6=3

^

求幂

10^3=1000

 

五、分支结构

分支结构语句有两种:

if语句和SelectCase语句

(1)if语句

单分支:

格式:

if条件表达式then

执行语句1

[Else执行语句2]

Endif

功能:

条件表达式成立就执行语句1,不成立就执行语句2

说明:

条件语句以if开头,以Endif结束,if和Endif要成对出现。

例9-9在窗体上放一个命令按钮和3个文本框,在前两个文本框中输入两个整数,单击命令按钮比较这两个文本框中输入的整数的大小,并将较大的数放到第三个文本框。

分析:

输入的两个数存放到x,y中,用z存放较大的数:

如果x>y,则z=x,否则就让z=y

步骤:

1、新建窗体,放置三个文本框,及一个命令按钮,分别选中这些控件,在属性窗口中设置文本框及按钮名称为文本1、文本2、文本3、命令0

2、

PrivateSub命令0_Click()

DimxAsInteger,yAsInteger,zAsInteger

x=文本1.Value

y=文本2.Value

Ifx>yThen

z=x

Else

z=y

EndIf

文本3.Value=z

EndSub

选中按钮,在其属性窗口的中切换到“事件”选项,再在“单击”一栏中选“事件过程”,单击这一栏后面的按钮,输入以下代码:

3、切换到窗体视图,在文本框1、2中输入两个数(例如2,6),单击“确定”则在第三个文本框中显示较大的数。

如果从有三种或三种以上的条件选择1种,则要用下面的条件语句:

格式:

If条件表达式1then

执行语句1

Elseif条件表达式2then

执行语句2

……

Else

执行语句n

Endif

注意书上错误,此处的Elseif没有空格(在Else和if之间)

例9-10在窗体上放一个命令按钮和两个文本框,单击命令按钮根据窗体中“成绩”文本框输入的成绩,判断成绩等级,并显示在窗体的“等级”文本框中。

判定方法:

85分以上优秀,75分至85分良好,60至75分及格,60分以下不及格。

分析:

由于一个成绩有四个等级选择,所以要用到多种条件选择语句

步骤:

1、新建一个窗体,放一个命令按钮及两个文本框,在相应的属性窗口设置它们的名称分别是“命令0”、“成绩”、“等级”

2、在按钮0上添加程序代码如下:

3、关闭程序窗口,切换到窗体视图下,输入不同的分数,单击“确定”按钮后可显示不同的等级:

多种条件选择语句除了用以上的语句格式外,还有一种更加简洁的分支语句结构SelectCase语句

(2)SelectCase语句

格式:

SelectCase变量表达式

Case表达式列表1

执行语句1

Case表达式列表2

执行语句2

……

CaseElse

执行语句n

EndSelect

功能:

第一句中变量表达式中的值满足哪个表达式列表,就执行哪个语句。

例9-11将例9-10中的if语句改成SelectCase表示。

步骤:

1、修改命令按钮上程序代码如下:

四、关闭程序窗口,切换到窗体视图下输入不同的成绩值进行调试。

六、循环结构

如果在程序中需要重复执行某段代码,可用循环结构VBA中提供了三种循环结构

(一)Do…Loop循环

格式:

Do[[While/Until]条件表达式]

……

……

Loop

功能:

根据DoWhile后面的条件表达式来重复执行循环语句体若干次,直到表达式的值不再成立时,执行Loop后面的语句。

例9-12在窗体上放一个命令按钮,当单击该按钮时,计算1+2+3+100的结果,并利用消息框显示出来

步骤如下:

1、新建一个窗体,添加一个按钮,在属性窗口中设置名称为“命令0”

2、

PrivateSub命令0_Click()

DimsAsInteger,xAsInteger

s=0:

x=1

DoWhilex<=100

s=s+x

x=x+1

Loop

MsgBox"1+2+...+100的值为:

"&s

EndSub

在按钮上添加代码如下:

 

3、关闭程序编辑窗口,切换到窗体视图,单击命令按钮,则弹出计算结果。

想一想:

●如果改成求1×2×3…×10的值,该怎样进行?

●如果改成在文本框中输入一个值x,求1+2+…x的值,该怎样进行?

例9-13在窗体上放一个命令按钮,当单击该命令按钮时,求满足不等式1+2+3+…+n<=100的最大整数n,并将所求的n输出在消息框中。

(最终满足条件的n为13)

PrivateSub命令0_Click()

DimsAsInteger,nAsInteger

s=0:

n=0

DoWhiles<=100

n=n+1

s=s+n

Loop'注意退出循环时n(比满足S<100的那个n)增加了1

MsgBox"满足1+2+…+n<=100的最大整数n为"&n-1

EndSub

步骤:

打开例9-12,修改程序如下:

 

这一题我们也可以利用Do…LoopUntil,其功能是直到…条件表达式成立退出

例9-14,利用Do…LoopUntil改写例9-13

PrivateSub命令0_Click()

DimsAsInteger,nAsInteger

s=0:

n=0

Do

n=n+1

s=s+n

LoopUntils>100'注意退出循环时n(比满足S<100的那个n)增加了1

MsgBox"满足1+2+…+n<=100的最大整数n为"&n-1

EndSub

 

(二)For…Next循环

格式:

For循环变量=初值to终值[step增量]

……  

……  

Next循环变量

功能:

其执行过程分以下两步:

(1)循环变量取初值后,执行循环体

(2)到Next循环变量时,循环变量加上增量,看是否超过终值,如超过则退出循环,否则继续执行循环体。

说明:

step1可省略不写(即循环变量增量为1时可省略step项不写)

例9-15编写一个过程,求0到100之间的所有奇数的和

分析:

过程就是在程序中反复用到的一小段程序,定义成过程后,后面再用到这段程序只要输入过程名即可调用这段程序

步骤:

1、新建一个窗体,添加一个按钮,进入按钮的代码编辑窗口:

2、在编辑窗口上修改并添加代码如下:

(见上图)

PrivateSubL15()’定义过程L15

DimsAsInteger,iAsInteger

s=0

Fori=1To100Step2

s=s+i

Nexti

MsgBox"1+3+5+...+99="&s

EndSub

4、切换到窗体设计视图,选中按钮,在属性窗口中仍然选“事件”选项卡下的“单击事件”栏中选“事件过程”,在编辑窗口中添加程序如下:

5、切换到窗体视图,单击按钮则调用过程L15,执行过程L15的程序,效果如下:

注:

任何一种循环语句都可以用另一种循环语句代替,上面的FOR…Next循环程序用D0While…Loop循环也可行,程序改动如下:

DimsAsInteger,iAsInteger

s=0

i=1

dowhilei<100

s=s+i

i=i+2

loop

MsgBox"1+3+5+...+99="&s

例9-16编写一个过程,输入一个整数n,然后求1!

+2!

+…+n!

,然后在命令按钮中调用这个过程

仿例9-15即可。

过程程序如下:

PrivateSubPro916()

DimiAsInteger,jAsInteger,nAsInteger

DimtAsLong,sAsLong't用来存放阶乘数,s用来存放阶乘的和,由于值太大,所以定义为长整型变量。

t=1:

s=0

n=inputbx("请输入一个整数n:

")

Fori=1Ton

t=1'保证每次阶乘从1开始计算

Forj=1Toi

t=t*j

Nextj

s=s+t

Nexti

MsgBox"1!

+2!

+...+"&n&"!

="&s

EndSub

例9-17编写一个过程,从键盘输入10个数,输出其中的最大数和最小数

分析:

本题可使用inputbox函数接受用户输入的数字,由于输入的数据有10个,所以定义一个包含10个元素的数组A

(1)、A

(2)、…A(10)来存放这些数字,变量Max的初始值放A

(1),然后和A

(2)到A(9)逐个比较,只要有比A

(1)大的数Max就存放这个数,这样Max就存放出最大的数;Min的初始值也存放A

(1),然后和A

(2)到A(9)逐个比较,只要有比A

(1)小的数Min就存放这个数,这样Min就存放出最小的数。

步骤:

1、窗体上添加一个命令按钮,添加代码如下:

(见下图)

2、选中按钮,添加单击按钮调用过程L17的代码(见上图代码窗口的下半部分代码)

3、切换到窗体,单击命令按钮后,会提示输入数字,先后输入10个不同的数字后,最后会显示最大数及最小数,(这里可输入1、2、3、7、8、9、10、4、5、6)

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的支持)

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1