第9章 模块与VBA程序设计_习题
一、选择题
1.模块是存储代码的容器,其中窗体就是一种( )。A
A.类模块 B.标准模块 C.子过程 D.函数过程 2.使用Dim声明变量,若省略“As类型”,则所创建的变量默认为( )。C A.Integer B.String C.Variant D.不合法变量 3.函数Len(\数据库\的值是( )。A
A.9 B.12 C.15 D.18
4.函数Right(Left(Mid(\Access_DataBase\,10,3),2),1)的值是( )。A A.a B.B C.t D.空格 5.在下列逻辑表达式中,能正确表示条件“m和n至少有一个为偶数”的是( )。C
A.m Mod 2 = 1 Or n Mod 2 = 1 B.m Mod 2 = 1 And n Mod 2 = 1 C.m Mod 2 = 0 Or n Mod 2 = 0 D.m Mod 2 = 0 And n Mod 2 = 0 6.语句Select Case x 中,x为一整型变量,下列Case语句中,表达式错误的是( )。D
A.Case Is > 20 B.Case 1 To 10 C.Case 2, 4, 6 D.Case x > 10 7.Sub过程和Function过程最根本的区别是( )。A
A.Sub过程的过程名不能返回值,而Function过程能通过过程名返回值 B.Sub过程可以使用Call语句或直接便用过程名,而Function过程不能 C.两种过程参数的传递方式不同
D.Function过程可以有参数,Sub过程不能有参数
8.VBA中用实参x和y调用有参过程PPSum(a, b)的正确形式是( )。B
A.PPSum a, b B.PPSum x, y C.Call PPSum(a, b) D.Call PPSum x, y 9.在VBE的立即窗口输入如下命令,输出结果是( )。B
x=4=5 ? x
A.True B.False C.4=5 D.语句有错 10.程序调试的目的在于( )。D
A.验证程序代码的正确性 B.执行程序代码
C.查看程序代码的变量 D.查找和解决程序代码的错误 二、填空题 1.在VBA中,要得到[15,75]区间的随机整数,可以用表达式________。Int(Rnd*61+15) 2.定义了二维数组A(2 to 5, 5),则该数组的元素个数为 。24
3.VBA中变量作用域分为3个层次,这3个层次的变量是________、________和________。局部变量,模块变量,全局变量
4.VBA的有参过程定义,形参用________说明,表明该形参为传值调用;形参用ByRef说明,表明该形参为________。ByVal,传地址调用
5.有如下VBA代码,运行结束后,变量n的值是 ,变量i的值是 。12,4
n=0
For i=1 To 3 For j=-4 To -1
1
n=n+1 Next j Next i
6.设有以下窗体单击事件过程:
Private Sub Form_Click()
a=1
For i=1 To 3 Select Case i Case 1,3 a=a+1 Casw 2,4 a=a+2 End Select Next i MsgBox a End Sub
打开窗体运行后,单击窗体,则消息框的输出内容是________。5
7.进行ADO数据库编程时,用来指向查询数据时返回的记录集对象是 。RecordSet
8.RecordSet对象有两个属性用来判断记录集的边界,其中,判断记录指针是否在最后一条记录之后的属性是 。EOF
三、问答题
1.在Access中,既然已经提供了宏操作,为什么还要使用VBA?
答:在Access中宏提供的是常用的一些操作,但未包含所有操作。用户在表示一些自我需要的特定操作时,仍需使用VBA代码编写其操作。
2.什么是类模块和标准模块?它们的特征是什么?
答:类模块是与类对象相关联的模块,所以也称为类对象模块。类模块是可以定义新对象的模块。新建一个类模块,表示新创建了一个对象,通过类模块的过程可定义对象的属性和方法。Access的类模块有3种基本形式:窗体类模块、报表类模块和自定义类模块。
标准模块是指可在数据库中公用的模块,模块中包含的主要是公共过程和常用过程,这些公用过程不与任何对象相关联,可以被数据库的任何对象使用,可以在数据库的任何位置执行。常用过程是类对象经常要使用的过程,需要多次调用的过程。一般情况下,Access中所说的模块是指标准模块。
类模块一般用于定义窗体、报表中某个控件事件的响应行为,常通过私有的过程来定义。类模块可以通过对象事件操作直接调用。
标准模块一般用来定义数据库、窗体、报表中多次执行的操作,常通过公有的过程来定义,标准模块通过函数过程名来调用。
3.什么是形参和实参?过程中参数的传递有哪几种?它们之间有什么不同?
答:过程或函数声明中的形式参数列表简称形参。形参可以是变量名(后面不加括号)或数组名(后面加括号)。如果子过程没有形式参数,则子程序名后面必须跟一个空的圆括号。
过程或函数调用时,其实际参数列表简称为实参,它与形式参数的个数、位置和类型必须一一对应,调用时把实参的值传递给形参。
在VBA中实参与形参的传递方式有两种:引用传递和按值传递。
2
在形参前面加上ByRef关键字或省略不写,表示参数传递是引用传递方式,引用传递方式是将实参的地址传递给形参,也就是实参和形参共用同一个内存单元,是一种双向的数据传递,即调用时实参将值传递给形参,调用结束由形参将操作结果返回给实参。引用传递的实参只能是变量,不能是常量或表达式。
在形参前面加上ByVal关键字时,表示参数是按值传递方式,是一种单向的数据传递。即调用时只能由实参将值传递形参,调用结束后不能由形参将操作结果返回给实参。实参可以是常量、变量或表达式。
4.编写程序,要求输入一个3位整数,将它反向输出。例如输入123,输出为321。 答:
在Access中设计的窗体如上图所示,转换命令按钮的单击事件代码如下: Private Sub cmd_convert_Click()
Dim v_result As String '结果变量 v_result = \
If Not IsNumeric(Text0.Value) Then MsgBox \输入的不为数值!\ Exit Sub End If
If Len(Text0.Value) <> 3 Then MsgBox \输入的不为3位数!\
End If
For i = 1 To 3
v_result = v_result & Mid(Text0.Value, 3 - i + 1, 1) Next i
MsgBox \结果:\
End Sub
5.利用IF语句求3个数X、Y、Z中的最大数,并将其放入MAX变量中。 答:VBA代码如下:
Private Sub Command1_Click()
x = InputBox(\请输入第一个数x的值\请输入需比较的数\ max = x
y = InputBox(\请输入第二个数y的值\请输入需比较的数\ If y > max Then max = y
z = InputBox(\请输入第三个数z的值\请输入需比较的数\ If z > max Then max = z
Me.Text1.Value = Str(x) & \ Me.Text3.Value = max
3
End Sub
6.使用Select Case结构将一年中的12个月份,分成4个季节输出。 答:VBA代码如下: Private Sub Form_Load() Me.Text1.Value = \ End Sub
Private Sub Command5_Click() Me.Text1.Value = \
m% = InputBox(\请输入欲判断季节的月份的值\注意:只可为1-12之间的整数\ Select Case m Case 2 To 4 ' 春季
Me.Label2.Caption = Trim(Str(m)) & \月份的季节为\ Me.Text1.Value = \春季\ Case 5 To 7 '夏季
Me.Label2.Caption = Trim(Str(m)) & \月份的季节为\ Me.Text1.Value = \夏季\ Case 8 To 10 '秋季
Me.Label2.Caption = Trim(Str(m)) & \月份的季节为\ Me.Text1.Value = \秋季\ Case 11 To 12, 1
Me.Label2.Caption = Trim(Str(m)) & \月份的季节为\ Me.Text1.Value = \冬季\ Case Else '无效的月份
Me.Text1.Value = \输入的是无效的月份\ End Select End Sub
7.求100以内的素数。 答:VBA代码如下:
Private Sub Command1_Click() Dim m As String Me.Text1.Value = \ m = \
For i% = 3 To 99 Step 2 For j% = 2 To i - 1 Lx% = i Mod j If Lx = 0 Then Exit For End If Next
If j > i - 1 Then
m = m + \ End If Next
Me.Text1.Value = m
4
End Sub
8.利用ADO对象,对“教学管理”数据库的“课程”表完成以下操作: (1)添加一条记录:“Z0004”,“数据结构”,“必修”,1。
(2)查找课程名为“数据结构”的记录,并将其学分更新为3。 (3)删除课程号为“Z0004”的记录。 答:(1)在教学管理数据库中,添加一条记录的过程如下。
Sub AddRecord(kc_hao As String, kc_name As String, kc_class As String, kc_score As Integer)
Dim rs As New ADODB.Recordset Dim conn As New ADODB.Connection On Error GoTo GetRS_Error
Set conn = CurrentProject.Connection '打开当前连接 rs.Open strSQL, conn, adOpenKeyset, adLockOptimistic rs.AddNew
rs.Fields(\课程号\ rs.Fields(\课程名\ rs.Fields(\课程类别\ rs.Fields(\学分\ rs.Update
Set rs = Nothing Set conn = Nothing End Sub
(2)查找课程名为“数据结构”的记录,并将其学分更新为3。其代码实现如下: Sub ExecSQL()
Dim conn As New ADODB.Connection
Set conn = CurrentProject.Connection '打开当前连接
strsql = \课程 set 学分=3 where 课程名='数据结构'\ conn.Execute (strsql) Set conn = Nothing End Sub
(3)删除课程号为“Z0004”的记录。其实现方法只需将ExecSQL()过程中的SQL语句改为:strsql = \课程 where 课程号='Z0004'\
5
相关推荐: