模块与VBA程序设计

更新时间:2023-10-04 21:18:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验11 模块与VBA程序设计

一、实验目的

1、掌握建立标准模块及窗体模块的方法 2、熟悉VBA开发环境及数据类型

3、掌握常量、变量、函数及其表达式的用法

4、掌握程序设计的顺序结构、分支结构、循环结构 5、了解VBA的过程及参数传递

6、掌握变量的定义方法和不同的作用域和生存期 7、了解数据库的访问技术 二、实验内容

实验11-1创建标准模块和窗体模块 1、 实验要求

在 “罗斯文.accdb” 数据库中创建一个标准模块“M1”,并添加过程“P1”和“P2”。 2、 实验步骤

(1) 打开“罗斯文.accdb”数据库,选择“创建”选项卡→“宏与代码”组→单击“模

块”按钮,打开VBE窗口。选择“插入”→过程,弹出过程对话框,如图11-1所示。

图 11-1 VBE菜单栏及插入菜单的下拉菜单

(2) 在过程对话框中“名称”文本框输入“P1”,“类型”栏选择“子程序”,“范围”栏

选择“公共的”,单击“确定”,如图11-2所示。

图 11-2 添加过程

(3) 在代码窗口中输入 “P1”的子过程代码,如图11-3所示。

图 11-3 P1子过程代码

(4) 单击“视图”→“立即窗口”菜单命令,打开立即窗口,并在立即窗口中输入“Call

P1( )”,并按回车键,或单击工具栏中的“运行子过程/用户窗体”按钮,查看运行结果,如图11-4所示。

图 11-4 P1子过程的调用

(5) 单击工具栏中的“保存”按钮,输入模块名称为“M1”,保存模块。单击工具栏中

的“视图Microsoft office Access”按钮,返回Access。

(6) 在数据库窗口中,选择“模块”对象,再双击“M1”,打开VBE窗口。 (7) 输入以下代码:

Sub P2()

Dim name As String

name = InputBox(\请输入姓名\输入\MsgBox \欢迎您\End Sub

(8) 单击工具栏中的“运行子过程/用户窗体”按钮,运行P2,输入自己的姓名,查看

运行结果。

(9) 击工具栏中的“保存”按钮,保存模块。

(10) 在数据库窗口中,选择“创建”选项卡→“窗体”组→单击“窗体设计”按钮,打

开打开窗体的设计视图,再选择“设计”选项卡→“工具”组中的“查看代码”按

,打开VBE窗口,输入以下代码: Private Sub Form_Click()

Dim Str As String, k As Integer Str = \

For k = Len(Str) To 1 Step -1

Str = Str & Chr(Asc(Mid(Str, k, 1)) + k) Next k

MsgBox Str End Sub

(11) 单击保存按钮,将窗体保存为“Form11_1”,单击工具栏中的“视图Microsoft office

Access”按钮,返回到窗体的设计视图中。

(12) 选择“视图”→“窗体视图”菜单命令,单击窗体,查看消息框里显示的结果。 实验11-2 Access常量、变量、函数及表达式

要求:通过立即窗口完成以下各题。 1.填写命令的结果

?7\\2 结果为 ?7 mod 2 结果为 ?5/2<=10 结果为 ?#2012-03-05# 结果为 ?\程序设计基础\结果为 ?\数据库\结果为 ?\结果为

a1=#2009-08-01# a2=a1+35

?a2 结果为 ?a1-4 结果为 2.数值处理函数

在立即窗口中输入命令 ?int(-3.25) ?sqr(9) ?sgn(-5) ?fix(15.235) ?round(15.3451,2) ?abs(-5) 结果 功能 3.常用字符函数

在立即窗口中输入命令 ?InStr(\c=\ 结果 功能

?Mid(c,4,3) ?Left(c,7) ?Right(c,10) ?Len(c) d=\?\程序\?\程序\?\程序\?\ 4.日期与时间函数

在立即窗口中输入命令 ?Date() ?Time() ?Year(Date()) 结果 功能 5.类型转换函数

在立即窗口中输入命令 ?Asc(\?Chr(67) ?Str(100101) ?Val(\ 结果 功能

实验11-3 VBA流程控制(顺序控制与输入输出) 1、 实验要求

输入圆的半径,显示圆的面积。

图 11-5 圆的半径输入窗口

图 11-6 圆面积输出窗口

2、 实验步骤

(1) 在数据库窗口中,选择“模块”对象,单击“新建”按钮,打开VBE窗口。 (2) 在代码窗口中输入“Area”子过程,过程Area代码如下:

Sub Area()

Dim r As Single Dim s As Single

r = InputBox(\请输入圆的半径:\输入\s = 3.14 * r * r

MsgBox \半径为:\时的圆面积是:\End Sub

(3) 运行过程Area,在输入框中,如果输入半径为1,记录输出结果。 (4) 单击工具栏中的“保存”按钮,输入模块名称为“M2”,保存模块。 实验11-4 VBA流程控制(选择控制1) 1、 实验要求

编写一个过程,从键盘上输入一个数X,如X≥0,输出它的算术平方根;如果X<0,输出它的平方值。

图 11-7 数据输出窗口

图 11-8 结果输出窗口

2、 实验步骤

(1) 在数据库窗口中,双击模块“M2”,打开VBE窗口。

(2) 在代码窗口中添加“Prm1”子过程,过程Prm1代码如下:

Sub Prm1()

Dim x As Single

x = InputBox(\请输入X的值\输入\If x >= 0 Then y = Sqr(x) Else

y = x * x End If

MsgBox \时y=\End Sub

(3) 运行Prm1过程,如果在“请输入X的值:”中输入:4(回车),记录结果。 (4) 单击工具栏中的“保存”按钮,保存模块M2。 实验11-5 VBA流程控制(选择控制2)

图11-21查询立即窗口

2、 实验步骤

(1) 打开“罗斯文.accdb”数据库,新建一个标准模块,打开VBE窗口。

(2) 在VBE中引用ADO部件,具体做法:单击“工具”→“引用”→“Microsoft ActiveX

Data Objects 2.8 Library”

(3) 在VBE窗口输入以下子过程代码:

Private Sub DemoField()

‘声明并实例化Recordset对象和Field对象 Dim rst As ADODB.Recordset Dim fld As ADODB.Field

Set rst = New ADODB.Recordset

rst.ActiveConnection = CurrentProject.Connection rst.Open \员工\Set fld = rst(\名字\Debug.print fld.value End Sub

(4) 保存模块,模块名为“M4”,运行过程DemoField,打开立即窗口,观察运行结果。

实验11-17 VBA数据库访问技术(添加)

1、 实验要求

通过如图11-22所示的窗体向“员工”表中添加员工记录,对应“姓氏”、“名字”、“职务”、“城市”和“公司”的四个文本框的名称分别为tLName、tFName、tPox、tCity和tCompany。当单击窗体中的“添加”命令按钮(名称为Command1)时,首先判断姓氏和名字是否重复,如果不重复,则向“员工”表中添加员工记录;如果姓氏和名字重复,则给出提示信息。 2、 实验步骤

(1) 新建窗体,在窗体设计视图中的主体节中添加五个标签,五个文本框,两个命令按

钮。如图11-9所示

图11-22“添加记录”窗体的设计结果

(2) 打开属性窗口,将五个文本框中“标题”属性分别设置为tLName、tFName、tPox、

tCity和tCompany;第一个命令按钮“名称”属性设置为“CmdAdd”,“标题”属性设置为“添加”,第二命令按钮“名称”属性设置为“CmdExit”,“标题”属性设置为“退出”;将窗体对象的“标题”属性设置为“添加记录”,将“导航按钮”属性设置为“否”,“记录选择器”属性设置为“否”。

(3) 在VBE中引用ADO部件,具体做法:单击“工具”→“引用”→“Microsoft ActiveX

Data Objects 2.8 Library”

(4) 打开代码窗口,输入并补充完整以下代码::

Option Compare Database

Dim ADOcn As New ADODB.Connection Private Sub Form_Load()

' 打开窗口时,连接Access数据库 Set ADOcn = CurrentProject.Connection End Sub

Private Sub CmdAdd_Click() ' 增加员工记录

Dim strSQL As String

Dim ADOrs As New ADODB.Recordset Set ADOrs.ActiveConnection = ADOcn

ADOrs.Open \ID From 员工 Where 姓氏= '\+ tLName + \And 名字='\tFName + \

If Not ADOrs._______ Then

' 如果该学号的学生记录已经存在,则显示提示信息 MsgBox \你输入的员工记录已存在,不能增加!\Else

' 增加新员工的记录

strSQL = \员工(姓氏,名字,公司,职务,城市) \strSQL = strSQL + \alues('\tLName + \tFName + \tCompany+ \ + tPox +

\ + tCity +\

ADOcn.Execute ________

MsgBox \添加成功,请继续!\End If

ADOrs.Close

Set ADOrs = Nothing End Sub

Private Sub CmdExit_Click() DoCmd.Close End Sub

(5) 保存窗体,窗体名称为“Form11_5”,切换至窗体视图,在相应的文本框中输入新的

员工信息,包括姓氏、名字、职务、城市、公司(姓氏和名字在员工表中不存在,其它不能空),单击“添加”按钮,打开员工表,观察程序的运行结果,再输入一个已有的员工信息(姓氏和名字在员工表中已存在),单击“添加”按钮,观察程序的运行结果。

实验11-18 VBA数据库访问技术(修改)

1、 实验要求

对产品表不同供应商的产品增加标准成本,规定供应商ID为金美的标准成本增加15%,供应商ID为佳佳乐的标准成本增加10%,其他供应商的标准成本增加5%。编写程序调整个供应商产品的标准成本,并显示所标准成本增加的总和。 2、 实验步骤

(1) 打开“罗斯文.accdb”数据库,新建一个标准模块,打开VBE窗口。

(2) 在VBE中引用ADO部件,具体做法:单击“工具”→“引用”→“Microsoft ActiveX

Data Objects 2.8 Library”。

(3) 新建窗体,在窗体的主体节区中添加一个命令按钮,将命令按钮的“名称”属性设置

为“CmdAlter”,“标题”属性设为“修改”,单击“代码”按钮,切换至VBE窗口中,输入并补充完整以下代码: Private Sub CmdAlter_Click() Dim ws as DAO.Workspace Dim db as DAO.Database Dim rs as DAO.Recordset Dim gz as DAO.Field Dim zc as DAO.Field Dim sum as Currency Dim rate as Single Set db = CurrentDb()

Set rs = db.OpenRecordset(\产品\Set cb = rs.Fields(\标准成本\Set id = rs.Fields(\供应商ID\sum = 0

Do While Not ______ rs.Edit

Select Case id

Case Is = \金美\ rate = 0.15 Case Is = \佳佳乐\ rate = 0.1 Case else rate = 0.05 End Select

sum = sum + cb * rate cb = cb + cb * rate _______________ rs.MoveNext Loop rs.Close db.Close

set rs = Nothing set db = Nothing

MsgBox \标准成本增加总计:\End Sub

(4) 保存窗体,窗体名称为“Form11_6”,切换至窗体视图,单击“修改”按钮,观察程

序的运行结果。

本文来源:https://www.bwwdw.com/article/3k8d.html

Top