VBA理论练习题 - 图文

更新时间:2024-04-18 15:31:02 阅读量: 综合文库 文档下载

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

VBA理 论 练 习 题 第 1 页 共 42 页

第一部分(模块与VBA编程基础)

一、选择题(1~17):

1.VBA中定义符号常量可以用关键字

A)Const B)Dim C)Public D)Static 2.Sub过程和Function过程最根本的区别是

A)Sub过程的过程名不能返回值,而Function过程能通过过程名返回值 B)Sub过程可以使用Call语句或直接使用过程名,而Function过程不能 C)两种过程参数的传递方式不同

D)Function过程可以有参数,Sub过程不能有参数 3.定义了二维数组A(2 to 5,5),则该数组的元素个数为 A)25 B)36 C)20 D)24 4.已知程序段:

s=0

For i=1 To 10 step 2 s=s+1 i=i*2 Next i

当循环结束后,变量i的值为a,变量s的值为b。 a. A)10 B)11 C)22 D)16 b. A)3 B)4 C)5 D)6 5.以下内容中不属VBA提供的数据验证函数是

A)IsText B)IsDate C)IsNumeric D)IsNull

6.已定义好有参函数f(m),其中形参m是整型量。下面调用该函数,传递实参为5将返回的函数值赋给变量t.以下正确的是

A)t=f(m) B)t=Call(m) C)t=f(5) D)t=Callf(5)

7.在有参函数设计时,要想实现某个参数的“双向”传递,就应当说明该形参为“传址”调用形式。其设置选项是

A)ByVal B)ByRef C)Optional D)ParamArray

8.在VBA代码调试过程中,能够显示出所有在当前过程中变量声明及变量值信息的是

VBA理 论 练 习 题 第 2 页 共 42 页

A)快速监视窗口 B)监视窗口 C)立即窗口 D)本地窗口 9.VBA的逻辑值进行算术运算时,True值被当作 A)0 B)-1 C)1 D)任意值 10.VBA中不能进行错误处理的语句结构是

A)On Error Then标号 B)On Error Goto 标号 C)On Error Resume Next D)On Error Go 100

11.VBA中用实际参数a和b调用有参过程Area(m,n)的正确形式是

A)Aream,n B)Area a,b C)Call Area(m,n) D)Call Area a,b 12.给定日期DD,可以计算该日期当月最大天数的正确表达式是 A)Day(DD)

B)Day(DateSerial(Year(DD),Month(DD),Day(DD))) C)Day(DateSerial(Year(DD),Month(DD),0))

D)Day(DateSerial(Year(DD),Month(DD)+1,0) 13.下列关于宏和模块的叙述中,正确的是 A)模块是能够被程序调用的函数 B)通过定义宏可以选择或更新数据

C)宏或模块都不能是窗体或报表上的事件代码

D)宏可以是独立的数据库对象,可以提供独立的操作动作 14.有如下VBA代码,运行结束后,变量n的值是 n=0

For i=1 TO 3

Forj=-4 To -1 n=n+1 Nextj Next i

A)0 B)3 C)4 D)12 15.假设有如下Sub过程:

Sub sfun(x As Single,Y As Single) t=x x=t/y

y=t mod y ‘mod求余计算 例7 mod 4 =3 End Sub

VBA理 论 练 习 题 第 3 页 共 42 页

在窗体中添加一个命令按钮(名为Comnndl),编写如下事件过程

Private Sub Commandl_Click() Dim a As SinSle Dim b As SinSle a=5:b=4

sfun(a,b) ‘原书有错,改为:sfun a,b或call sfun(a,b) MsgBox a & chr(10) + chr(13) & b ‘chr(数值)的功能返回数值对应的字母

End Sub ‘chr(10)=’返回1个换行符

?????‘chr(13)=’返回一个空格符号

注意:a → x ; b → y 是按地址传递的,因此不能写成sfun 5,4 chr与Asc互逆 例asc(a)=97 ; chr(97)=a asc(chr(97))=97 打开窗体运行后,单击命令按钮,消息框中有两行输出,内容分别为 A)1和1 B)1.25和l C)1.25和4 D)5和4 16.有如下VBA程序段:

sum=0 n=0

For i=1 TO 5 x=n/i n=n+1 slim=sum Next i

以上For循环计算sum,完成的表达式是

A)1+1/1+2/3+3/4+4/5 B)1+1/2+1/3+1/4+1/5 C)1/2+2/3+3/4+4/5 D)1/2+1/3+1/4+1/5

17.在窗体中有一个命令按钮runl6,对应的事件代码如下:

Private Sub runl6_Enter() Dim num As Integer Dim a As Integer

Dim b As Integer . Dim i As Integer For i=1 To 10

num=InputBox(\请输入数据:\,\输入\

if Int(num/2)=num/2 Then ‘Int取整函数 例int(3.5)=3 a=a+1 Else b=b+1

VBA理 论 练 习 题 第 4 页 共 42 页

End lf Next I

MsgBox(\运行结果:a=\,b=\

End Sub ‘str(123)=”123”将123转换成字符串 与val互逆。例:Val(str(123))=123 运行以上事件所完成的功能是 A)对输入的10个数据求累加和

B)对输入的10个数据求各自的余数,然后再进行累加

c)对输入的10个数据求分别统计有几个是整数,有几个是非整数 D)对输人的10个数据求分别统计有几个是奇数,有几个是偶数

二、填空题(1~25)

1.VBA的全称是 Visual Basic for Application。

2.模块包含了一个声明区域和一个或多个子过程(以Sub开头)或函数过程(以Function开头)。

3. 说明变量最常用的方法,是使用Dim ? As ?结构.

4.VBA中变量作用域分为3个层次,这3个层次是局部变量、模块变量和全局变量。 5.在模块的说明区域中,用private关键字说明的变量是模块范围的变量;而用public或Global键字说明的变量是属于全局范围的变量。

6.要在程序或函数的实例间保留局部变量的值,可以用Static关键字代替Dim。 7.用户定义的数据类型可以用Type?Type End关键字间说明。 8.VBA的3种流程控制结构是顺序结构、选择结构和循环结构。 9.VBA中使用的3种选择函数是IIf、Switch和Choose。

10.VBA提供了多个用于数据验证的函数。其中IsDate函数用于合法日期验证;IsNumeric函数用于判定输入数据是否为数值。

11.VBA的有参过程定义,形参用ByVal说明,表明该形参为传值调用;形参用ByRef说明,表明该形参为传址调用.

12.VBA的错误处理主要使用On Error语句结构。 13.On Error Goto 0语句的含义是取消错误处理。

14.On Error Resume Next语句的含义是忽略错误并执行下一条语句。 15.VBA语言中,函数lnputBox的功能是输入数据对话框; Msgbos函数的功能是显示消息信息。

VBA理 论 练 习 题 第 5 页 共 42 页

16.在VBA中双精度的类型标识是Double。

17.在VBA中,分支结构根据条件(或条件表达式)选择执行不同的程序语句。 18.VBA的逻辑值在表达式当中进行算术运算时,True值被当作-1、False值被当作0来处理。

19.VBA编程中,要得到[15,75]上的随机整数可以用表达式Int(15+61*Rnd). 20.设有如下代码:

X=1

Do

x=x+2

Loop Until x=7 (或x>=7 或 x>6)

运行程序,要求循环体执行3次后结束循环,请在空白处填入适当的语句 21.设有以下窗体单击事件过程:

Private Sub Form_Click() a=1

for i=1 to 3 Select Case i Case 1,3 a=a+1 Case 2,4 a=a+2 end Select Next i MsgBox a End Sub

打开窗体运行后,单击窗体,则消息框的输出内容是5。

22.在窗体中添加一个命令按钮(名为Commandl)和一个文本框(名为Textl),编写事件代码如下

Private Sub Commandl Click()

Dim a As Integer,y As Integer x=5:y=7:z=0 Me!Textl=\ Call Pl(x,x,z) Me!Textl=z End Sub

Private p1(a As Integer,b As Integer,c As Integer)

VBA理 论 练 习 题 第 6 页 共 42 页

c=a+b End Sub

打开窗体后,单击命令按钮,文本框中显示的内容是12 23.在下面的VBA程序段运行时,内层循环的循环次数是9

For m=0 To 7 Step 3 For n = m-1 To m+1 Next n Next m

24.在窗体中使用一个文本框(名为numl)接受输入值,有一个命令按钮run,单击事件代码如下

Private Subrun_Click() If Me!num1>=60 Then Result="及格"

Else If Me!numl>70 Then

Result="通过"

Else If Me!numl>85 Then

Result="合格"

End Sub

打开窗体后,若通过文本框输入的值为85,单击命令按钮,输出结果是及格。 25.在窗体中有一个名为Command25的命令按钮,Click事件代码如下。该事件的完整功能是:接受从键盘输入的10个大于0的整数,找出其中的最大值和对应的输入位置。请依据上述功能要求将程序补充完整。 Private Sub Command25_Click() Max=0 max_n=0

For i=l To 10

num=Val(InputBox("请输入第"& i &"个大于0的整数:")) If num>max Then max=num

max_n=i

End If Next i

MsgBox(\最大值为第\个输入的\ End Sub

VBA理 论 练 习 题 第 7 页 共 42 页

第二部分(数据库编程)

一、选择题(1~9)

1.以下内容中不属VBA提供的数据验证函数是

A)IsNull B)IsDate C)lsNumeric D)IsText

2.VBA\定时”操作中,需要设置窗体的“计时器间隔(TimerInterval)”属性值。其计量单位是

A)微秒 B)毫秒 C)秒 D)分钟

3.能够实现从指定记录集里检索特定字段值的函数是 A)Nz B)DSum C)Rnd D)DLookup 4.DAO模型层次中处在最顶层的对象是

A)DBEngine B)Workspace C)Database D)RecordSet 5.ADO对象模型中可以打开RecordSet对象的是

A)只能是Connection对象 B)只能是Command对象 C)可以是Connection对象和Command对象 D)不存在 6.InputBox函数返回值的类型为

A)数值 B)字符串(错误) 注意:正确答案为D)

C)变体 D)数值或字符串(视输入的数据而定)InputBox$ 返回字符串 InputBox 返回数值或字符串 7.ADO的含义是

A)开放数据库互连应用编程接12 B)数据库访问对象 C)动态链接库 D)Active数据对象 8.执行下面的语句后,所弹出的信息框外观样式为 MsgBox"AAAA",vbOKCancel+vbQuestion,"BBBB" 注:vbQuestion等价于32

VBA理 论 练 习 题 第 8 页 共 42 页

A MsgBox(\B

MsgBox(\C D MsgBox(\MsgBox(\ 9.在MsgBox(prompt,buttons,title,hetpfite,context)函数调用形式中必须提供的参数是

A)prompt B)buttons C)title D)context 二、填空题(1~18)(p8---p13):

1.VBA提供了多个用于数据验证的函数。其中IsDate函数用于合法日期验证;IsNumeric函数用于判定输入数据是否为数值。

2. VBA语言中,函数InputBox的功能是输入数据对话框;Msgbox函数的功能是显示消息信息。

3.VBA的“定时”操作功能是通过窗体的定时(Timer)事件过程完成。 4.VBA中打开窗体的命令语句是DoCmd.OpenForm。

5.Access的窗体或报表事件可以有两种方法来响应:宏对象和事件过程。 6.窗体的计时器触发事件激发的时间间隔是通过计时器间隔(或interval)属性来设置。

7.窗体中有两个命令按钮:“显示”(控件名为cmdDisplay)和“测试”(控件名为cmdTest)。当单击“测试”按钮时,执行的事件功能是:首先弹出消息框,若点击其中的“确定”按钮,则隐藏窗体上的“显示”按钮;否则直接返回到窗体中。 Private Sub cmdtest_Click()

Answer=MsgBox ("隐藏按钮?",vbOKCancel十vbQuestion,"Msg") If Answer=vbOK Then

VBA理 论 练 习 题 第 9 页 共 42 页

Me!cmddisplay.Visible=False End If End Sub 注意:vbOKCancel等价于1 vbQuestion等价于32 8.设计一个计时的Access应用程序。该程序界面如图所示,由一个文本框(名为Textl)、一个标签及两个命令按钮(一个标题为Start,命名为Commandl;另一个标题为Stop,命名为Command2)组成。程序功能为:打开窗体运行后,单击“Start'’按钮,则开始计时,文本框中显示秒数;单击“Stop”按钮,则计时停止;双击“Stop”按钮,则退出。请填空补充完整。

Dim i as integer

Private Sub Commandl Click( ) i=0

Me.TimerInterval=1000 End Sub

Private Sub Command2_Click( ) Me.TimerInterval=0

End Sub

Private Sub Command2_DblClick(Cancel As Integer) DoCmd.Close End Sub

Private Sub Form_Load( ) Me.TimerInterval=0 Me!Text1=0 End Sub

Private Sub Form_Timer( ) i=i+1

Me!Textl=i

VBA理 论 练 习 题 第 10 页 共 42 页

End Sub

9.要实现以下图示效果的消息框显示,VBA代码语句为MsgBox "数据处理结束!",vbinformation,"消息"

10.VBA中主要提供了三种数据库访问接口:ODBC API、DAO、ADO。 11.DAO对象模型采用分层结构,其中位于最顶层的对象是DBEngine。

12.Access的VBA编程操作本地数据库时,提供一种DAO数据库打开的快捷方式是CurrentDB().也提供一种ADO的默认连接对象是CurrentProject.Connection 13.DAO模型中,主要的控制对象有DBEngine、Workspace 、Database、 RecordSet Field和Error。

14.ADO对象模型主要有Connection、 Command 、RecordSet、 Field,而相应QueryDef和Error 5个对象。

15.已知一个为“学生”的Access数据库,库中的表“stud\存储学生的基本情况信息,包括学号、姓名、性别和籍贯。下面程序的功能是:通过窗体向stud表中添加学生记录。对应“学号”、“姓名”、“性别”和“籍贯”的4个文本框的名称分别为:tNo、tName、tSex和tRes。当点击窗体上的“增加”命令按钮(名称为Commandl)时,首先判断学号是否重复,如果不重复则向“stud\表中添加学生记录;如果学号重复,则给出提示信息。当点击窗体上的“退出”命令按钮(名称为Command2)时,关闭当前窗体。

依据要求功能,请将以下程序补充完整。

Private Sub Form_Load() ‘打开窗口时,连接Access数据库 Set ADOcn=CurrentProject.Connention

End Sub

Dim ADOcn As New ADODB.Connection Private Sub Commandl Click() ‘增加学生记录

Dim strSQL As String

Dim ADOrs As New ADO.Recordset

VBA理 论 练 习 题 第 11 页 共 42 页

Set ADOrs.ActiveConnection=ADOcn ADOrs.Open"Select学号From Stud Where学号='"+tNo+"'" If Not ADOrs.EOF Then MsgBox"你输入的学号已存在,不能新增加!” Else StrSQL="Insert Into stud(学号,姓名,性别,籍贯)" StrSQL=strSQL+"Values('",+tNo +"','"+tName+"','"+tSex+tRes+"')" ADOrs.Execute StrSQL MsgBox "添加成功,请继续!" End If ADOrs.Close Set ADOrs=Nothing End Sub Private Sub Command2_Click( ) Docmd.Close End Sub 16.已经设计出一个表格式表单窗体,可以输出教师表的相关字段信息。请按照以下功能要求补充设计:改变当前记录,消息框弹出提示“是否删除该记录?”, VBA理 论 练 习 题 第 12 页 共 42 页

单击“是”,则直接删除该当前记录;单击“否”,则什么都不做。其效果图如下: ’单击“退出”按钮,关闭窗体。 Private Sub btnCaneel_Ctick( ) DoCmd.Close End Sub ’表格式表单窗体当前记录变化时触发 Private Sub Form_Current( ) If MsgBox("是否删除该记录?",vbQuestion+vbYesNo,"确认") =6(或vbYes)Then Me.Recordset.Delete End lf End Sub 17.已经完成一个窗体的部分设计。请按照以下功能要求补充设计: (1)原始文本处的文本框只接受英文大小写字符和汉字,其他字符输入一律忽略; (2)单击“复制”按钮,可将原始文本框的选择内容追加到目标文本框内; (3)目标文本框内字符数超过50,则清空。 其效果图如下: 代码如下:

Dim strTemp AsString ’存放原始文本框选择文本 ’单击“复制”按钮,实施复制操作

PrivateSub tCopy_Click( )

Me!tDestText:Nz(Me!tDestText)十strTemp strTemp =””

If Len(Me!tDestText)>50 Then Me!tDestText=Null End Sub

’原始文本框接受英文大小字母和汉字输入

Private Sub tSourceText_KeyPress(KeyAscii AsInteger)

If(KeyAscii>=Ase("A") And KeyAscii<=Ase("Z")) Or (KeyAscii >=Asc("a") And KeyAscii<=Asc("2")) Then Else

VBA理 论 练 习 题 第 13 页 共 42 页

’输入其他字符,忽略 KeyAscii=0 End If

End Sub

’返回原始文本框选择文本

Private Sub tSourceText LostFocus( ) If Me!tSourceText.SelLength>0 Then

strTemp = Me!tSourceText.SelText

(或Mid(Me!tSourceText, Me!tSourceText.SelStart+1, Me!tSourceText.SelLength)) Else

strTemp="" End If

End Sub

18.Nz函数主要用于处理Null值时的情况;Dlookup函数的功用是从指定记录集里检索特定字段的值。

VBA理 论 练 习 题 第 14 页 共 42 页

第三部分(经典题解) 一、选择题(1~33)

1.假定有以下循环结构(2005年9月) Do Until条件 循环体 Loop

则正确的叙述是。

A)如果“条件”值为0,则一次循环体也不执行 B)如果“条件”值为0,则至少执行一次循环体 C)如果“条件”值不为0,则至少执行一次循环体 D)不论“条件”是否为“真”,至少要执行一次循环体

解析:Do…Until。..Loop循环结构中,当条件值为假时,重复执行循环体,直至条件值为真,结束循环。因此,如果条件值为0,则至少执行一次循环体。 2.窗体上添加有3个命令按钮,分别命名为Commandl、Command2和Command3。编写Commandl的单击事件过程,完成的功能为:当单击按钮Commandl时,按钮Command2可用,按钮Command3不可见。以下正确的是。(2005年9月)

A)Private Sub Commandl_Click() Command2.Visible=True Command3.Visible=False End Sub

B)PrivateSub Commandl_Click() Command2.Enabled=true Command3.Enabled=False End Sub

C)Private Sub Commandl_Click() Command2.Enabled=True Command3.Visible=False

End Sub

D)Private SubCommandl_Click() Command2.Visible=True Command3.Enabled=False

End Sub 解析:Enabled属性用于判断控件是否可用,而Visible属性用于判断控件是

VBA理 论 练 习 题 第 15 页 共 42 页

否可见。题目中要求Command2可用,而Command3不可见,则必须设置Command2的Enabled为True,并且设置Command3的Visible为False 3.假定有以下程序段:(2005年9月) n=0

for i=1 to 3 forj=-4 to -1 n=n+1 next j next i

运行完毕后,n的值是

A) 0 B) 3 C) 4 D) 12

解析:本题中,外层循环从1到3,要执行3次,而内层循环从-4到-1,执行4次,所以一共执行了4*3=12次循环。而每执行一次循环n就加1,所以最后n的值为12。

4.下列逻辑表达式中,能正确表示条件“x和Y都是奇数”的是。(2005年9月) A) x Mod 2=1 Or y Mod 2=1 B) x Mod 2=0 Or y Mod 2=0 C)x Mod 2=1 And y Mod 2=1 D)x Mod 2=0 And y Mod 2=0 解析:要使x和y都是奇数,则x和y除以2的余数都必须是1。

5.VBA程序的多条语句可以写在一行中,其分隔符必须使用符号。(2006年4月) A): B)’ C); D),

解析:VBA程序在一行上写多个语句时用冒号“:”作分隔符. 6.VBA表达式3*3\3/3的输出结果是。(2006年4月) A) 0 B) 1 C) 3 D) 9

解析:VBA的表达式运算符优先级顺序“*”和“/”高于“\\”。此表达式先计算3*3=9和3/3=1,最后计算9\1=9。

7.现有一个已经建好的窗体,窗体中有一个命令按钮,单击此按钮,将打开tEmployee表,如果采用VBA代码完成,下面语句正确的是。(2006年4月) A)docmd.openform"tEmployee" B)docmd.openview"tEmployee" C)docmd.Opentable"tEmployee" D)docmd.Openreport"tEmployee"

解析:docmd.openform使用openForm操作,可以从“窗体”视图、窗体“设计”视图、“打印预览”或“数据表”视图中打开一个窗体,可以选择窗体的数据

VBA理 论 练 习 题 第 16 页 共 42 页

输入与窗体数据输出方式并限制窗体所显示的记录。

Docmd.openview可以使用openview操作在“数据表”视图、视图“设计”视图或打印预览中打开视图。当在“数据表”视图中打开视图时,该操作运行此命名的视图。可以选择该视图的数据项,并可限制视图显示的记录数。

Docmd.openrepot使用OpenReport操作,可以在“设计”视图或“打印预览”中打开报表或立即打印报表,也可以限制需要在报表中打印的记录。

Docmd.opentable使用OPentable操作,可以在“数据表”视图、“设计”视图或打印预览中打开表,也可以选择表的数据输入方式。

8.Access的控件对象可以设置某个属性来控制对象是否可用(不可用时显示为灰色状态),需要设置的属性是一。(2006年4月)

A)Default B)Cancel C)Enabled D)Visible

解析:Default为命令按钮确定属性,只有命令按钮支持此属性。 Cancel为取消功能属性。 Enabled决定控件是否允许操作。 Visible决定控件是否可见。

9.如果加载一个窗体,先被触发的事件是。(2006年4月)

A)Load事件 B)Open事件 C)Click事件 D)Dalick事件

解析:Access加载窗体是运行指定的宏或用户定义的事件过程,然后显示窗体的记录。可以使用Load事件过程设置窗体或控件中的值,也可以设置窗体或控件的属性。Load事件发生在Open事件后及Resize事件前,不能被取消。Click事件发生在窗体单击时,没有Ddelick事件。

10.以下程序段运行结束后,变量x的值为_____。(2006年4月) x=2 y=4 DO

x=x*y y=y+1

Loop While y<4

A) 2 B) 4 C) 8 D) 20

解析:定义两个变量x=2、y=4,执行Do后的循环体语句:x=x*y=2*4=8;y=y+1=4+l=5;此时y:5,while语句为假退出循环。由于执行了一次循环,所以

VBA理 论 练 习 题 第 17 页 共 42 页

x=8。

11.在窗体上添加一个命令按钮(名为Commandl),然后编写如下事件过程:(2006年4月)

Private Sub Commandl_Click( ) For i=1 To 4 x=4

Forj=1 To 3 x=3

For k=1 T0 2 x=x+6 Next k Nextj Next i MsgBox x End Sub

打开窗体后,单击命令按钮,消息框的输出结果是。 A)7 B)15 C)157 D)538

解析:此题中应用三重嵌套循环,循环嵌套的执行,当外层循环执行一次,内层就要执行所有的循环:

第一个for语句对变量x赋值,x=4; 第二个for语句对变量x赋值,x=3;

第三个for语句对变最x赋值,x=x+6。当i=1时,j=1,k执行其内部的两次循环,此时x赋值为3,当k=1时,x=x+6=3+6=9:k=2时,x=x+6=96=15。退出内循环到第二个for语句执行其剩余的循环,i=1、j=2时,k依旧执行其内部的两次循环,此后x还是等于15。i=1、j=3时,因为第三个for语句始终对x的赋值为15,所以运算结果x始终等于15。第二层循环完成后退回到第一层,执行其剩余的循环,步骤同上,因此x=15。

12.假定有如下的Sub过程:(2006年4月)

Sub sfun(x As Single,y As Single) t=x x=t/y y=t Mod y End Sub

在窗体上添加一个命令按钮(名为Commandl),然后编写如下事件过程:

VBA理 论 练 习 题 第 18 页 共 42 页

Private Sub Commandl_Click() Dim a as single Dim b as single a=5 b=4

sfun a,b

MsgBox a & chr(10)+chr(13) & b End Sub

打开窗体运行后,单击命令按钮,消息框的两行输出内容分别为 。 A)1和1 B)1.25和1 C)1.25和4 D)5和4

解析:此题中设置了一个sfun()函数,进行除法运算和求模运算,为命令按钮(名为Commandl)编写事件,定义两变量a=5、b=4;调用此函数传递a、b的值给x、Y进行运算,t=x=5、y=4;x:t/y;x=5/4=1.25(除法运算);Y=t Mod y=5 mod 4=1(求模运算)。

13.Sub过程与Function过程最根本的区别是。(2006年9月)

A)Sub过程的过程名不能返回值,而Function过程能通过过程名返回值 B)Sub过程可以使用Call语句或直接使用过程名调用,而Function过程不可以 C)两种过程参数的传递方式不同

D)Function过程可以有参数,Sub过程不可以

解析:过程是模块的单元组成,分为两种类型:Sub过程和Function函数过程。VBA提供的关键字CALL,可显示调用一个子过程(Sub过程),但却不能调用执行函数过程(Function过程),此外Sub过程和Function过程都可以直接引用过程名来调用,因此选项B错误。Sub过程可以使用参数(由调用过程传递的常数、变量或表达式),所以选项D错误。选项C要视具体情况才能确定。Sub过程执行操作但不返回值,Function过程可以返回值,这也是过程最根本的区别,所以选项A是正确的。

14.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

PrivateSubCommandl_Click() A=0:b=5:c=6 MsgBox a=b+c End Sub

打开窗体运行后,如果单击命令按钮,则消息框的输出结果是 。

VBA理 论 练 习 题 第 19 页 共 42 页

A) 11 B) a=11 C) 0 D) False

解析:程序中“MsgBox a=b+c”表示在消息框中显示a与b+c的值比较的结果,由“a=0:b=5:c=6”可知,0!=11,所以消息框的输出结果为False。

15.在窗体中添加一个命令按钮(名称为Command1),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( ) Dim a(10,10) For m=2 TO 4 For n=4 TO 5 a(m,n)=m*n Next n Next m

MsgBox a(2,5)+a(3,4)+a(4,5) End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是 。 A) 22 B) 32 C) 42 D) 52

解析:根据程序,a(2,5)+a(3,4)+a(4,5)=2*5+3*4+4*5=42

16.在窗体中添加一个命令按钮(名为Commandl)和一个文本框(名为Textl),并在命令按钮中编写如下事例代码:(2006年9月)

Private Sub Commandl_Click()

m=2.17 ‘Len(“abc”)=3

n=Len(Str$(m)+Space(5)) ‘Str$(2.17)=”□2.17” Me.Textl=n ‘Space(5)=”□□□□□” End Sub

打开窗体运行后,单击命令按钮,在文本框中显示。 A) 5 B) 8 C) 9 D) 10

解析:程序中“n=Len(Str$(m)+Space(5))”的含义是算出字符串总长度,当把正数转换成字符串时,Str$函数在字符串前面留有一个空格,Space(数值表达式)返回由数值表达式确定的空格个数组成的空字符串。Str$(m)表5个字符串,Space(5)表示5个字符串,所以n等于10。

17.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( )

VBA理 论 练 习 题 第 20 页 共 42 页

A=75

If A>60 Then I=1 If A>70 Then I=2 If A>80 Then I=3 1f A>90 Then I=4 MsgBox I End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是。 A)1 B)2 C)3 D)4

解析:if条件表达式1 Then条件表达式1为真时要执的语句序列。在程序中,A=75,即A)70,执行 IfA)70 Then I=2,所以I=2。

18.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006年9月)

Private Sub Commandl_Click( ) s=\

For I=6 To 2 Step -2 x=Mid(s,I,I) y=Left(s,I) z=Right(s,I) z=x & y & z Next I MsgBox z End Sub

窗体打开运行后,单击命令按钮,则消息框的输出结果是。 A)AABAAB B)ABBABA C)BABBA D)BBABBA

解析:Mid(字符表达式,数值表达式1,数值表达式2):返回一个值,该值是从字符表达式最左端某个字符开始,截取到某个字符为止的若干个字符。其中,数值表达式1的值是开始的字符位置,数值表达式2是终止的字符个数。

Left(字符表达式,数值表达式):返回一个值,该值是从字符表达式左侧第1个字符开始截取的若干字符。其中,字符字数是数值达式的值。

Right(字符表达式,数值表达式):返回一个值,该值是从字符表达式右侧第1个字符开始截取的若干字符。其中,字符字数是数值表达式的值。

For循环运行三次,最后一次循环结束,x=\,y=\,z=\。 19.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码:(2006

VBA理 论 练 习 题 第 21 页 共 42 页

年9月)

Public x As Integer ‘x为全局变量(位置:通用声明段) ‘Dim y As Integer ‘y为模块变量(位置:通用声明段)

Private Sub Commandl_Click()

x=10 ‘x为全局变量 Call s1 Call s2

MsgBox x ‘x为全局变量 End Sub

Private Sub_s1( )

x=x+20 ‘x为全局变量 End Sub

PrivateSub_s2( )

Dim x As integer ‘x为局部变量 x=x+20 ‘x为局部变量 End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是。 A) 10 B) 30 C) 40 D) 50

解析:本题使用Call调用子过程s1、s2。x=10在调用子过程s1后,x=30,但由于在s1中直接使用变量,所以该值的作用范围是局部的,即只限于s1子过程中,没有传回。在调用s2时,由于使用Dim?As关键字定义x,所以其值是模块范围的。在消息框中输出的值,是从子过程s2传回的值(注意:解释有错,返回

应是调用S1时的x值。)。

20.有如下语句:(2007年4月) s=Int(100*Rnd)

执行完毕后,s的值是——。

A)[0,99]的随机整数 B)[0,100]的随机整数 C)11,99]的随机整数 D)[1,100]的随机整数

解析:随机数函数Rnd(<数值表达式>)用于产生一个小于1但大于。的值,该数值为单精度类型。Int(数值表达式)是对表达式进行取整操作,它并不做“四舍五人”运算,只是取出“数值表达式’’的整数部分。 21.InputBox函数的返回值类型是。(2007年4月) A)数值 B)字符串

VBA理 论 练 习 题 第 22 页 共 42 页

C)变体 D)数值或字符串(视输入的数据而定)

解析:InputBox的返回值是一个数值或字符串。当省略尾部的“$”时,InputBox函数返回一个数值,此时不能输入字符串。如果不省略“$”,则既可输入数值也可输人字符串,但其返回值是一个字符串。因此,如果需要输入数值,并且返回的也是数值,则应省略“$”;而如果需要输入字符串,并且返回的也是字符串,则不能省略“$”。如果不省略“$”,且输人的是数值,则返回字符串。当需要该数值参加运算时,必须用Val函数将其转换为数值。

22.在窗体中添加一个名称为Command 1的命令按钮,然后编写如下事件代码:(2007年4月)

Private Sub Commandl_Click() a=75

If a>60 Then k=l

ElseIf a>70 Then k=2

ElseIf a>80 Then k=3

ElseIf a>90 Then k=4 End If MsgBox k End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果是。 A)1 B)2 C)3 D)4

解析:a=75满足条件“a>60'’,执行THEN后的语句,将1赋值给变量k,然后结束条件判断,将k的值1输出到消息框,所以消息框的结果是1。 23.设有如下窗体单击事件过程:(2007年4月) Private Sub Form_Click() a=1

For i=1 To 3 Select Case i Case 1,3 a=a+1 Case 2,4

VBA理 论 练 习 题 第 23 页 共 42 页

a=a+2 End Select Next i MsgBox a End Sub

打开窗体运行后,单击窗体,则消息框的输出结果是。

A)3 B) 4 C)5 D)6

解析:SelectCase结构运行时,首先计算“表达式’’的值,它可以是字符串或者数值变量或表达式。然,会依次计算测试每个Cas,表达式的值,直到值匹配成功,程序会转入相应的Case结构内执行语句。本题,当i=1和3时,执行a=a+1,当i=2时,a=a+2,所以a=1+1+2+1=5。 24.设有如下程序:(2007年4月)

Private Sub Commandl_Click() Dim sum As Double,x As Double Sum=0 n=0

For i=1 To 5 x=n/i n=n+1

sum=sum+x Next i End Sub

该程序通过For循环来计算一个表达式的值,这个表达式是。 A)1+1/2+2/3+3/4+4/5 B)1+1/2+1/3+1/4+1/5 C)1/2+2/3+3/4+4/5 D)1/2+1/3+1/4+1/5

解析:当i=1时,sum=0+0/1;当i=2时,sum:0+0/1+1/2;当i=3时,sum:0+0/1+1/2+2/3;i=4时,sum=0+0/1+1/2+2/3+3/4;当i=5时,sum:0+0/1+1/2+2/3+3/4+4/5,即For循环是用计算表达式“1/2+2/3十3/4+4/5”的。 25.下列Case语句中错误的是。(2007年4月) A) Case 0 To 10 B) Case Is>10 C)Case Is>10 And Is<50 D)Case 3,5,Is>10

解析:Case表达式可以是下列4种格式之一:单一数值或一行并列的数值,用来与“表达式”的值相比较。成员间以逗号隔开;由关键字To分割开两个数值或

VBA理 论 练 习 题 第 24 页 共 42 页

表达式之间的范围;关键字Is接关系运算符;关键字CaseElse后的表达式,是在前面的Case条件[不满足时执行的。本题选项C中用的是逻辑运算符And连接两个表达式,所以不对,应该以逗号隔开。

26.如下程序段定义了学生成绩的记录类型,由学号、姓名和三门课程成绩(百分制)组成。 Type Stud No As Integer name As String score(1 to 3) As Single End Type 若对某个学生的各个数据项进行赋值,下列程序段中正确的是。(2007年4月) A)Dim S As Stud B)Dim S As Stud Stud.no=1001 S.no=1001

Stud.name=”舒宜” S.name=”舒宜” Stud.score=78,88,96 S.score=78,88,96 C)Dim S As Stud D)Dim S As Stud Stud.no=1001 S.no=1001

Stud.name=”舒宜” S.name=”舒宜” Stud.score(1)=78 S.score(1)=78 Siud.score(2)=88 S.score(2)=88 Stud.score(3)=96 S.score(3)=96

解析:用户定义数据类型是使用Type语句定义的数据类型。用户定义的数据类型可以包含一个或多个任意数据类型的元素。由Dim语句可创建用户定义的数组和其他数据类型。用户定义类型变量的取值,可以指明变量名及分量名,两者之间用句点分隔。本题中选项A、C中变量名均用的是类型名,所以错误。score(1 to 3)As Single定义了3个单精度数构成的数组,数组元素为score(1)-score(3)。 27.使用Function语句定义一个函数过程,其返回值的类型——。(2007年9月) A)只能是符号常量 B)是除数组之外的简单数据类型 C)可在调用时由运算过程决定 D)由函数定义时As子句声明

解析:函数的参数和返回值都有特定的值与之相对应,函数的返回值由函数定义时As子句声明。

28.在过程定义中有语句:(2007年9月) Private Sub GetData(ByRef f As Integer)

S.no=1001 S.name=”王林” S.score(1)=90 S.score(2)=95 S.score(3)=98 VBA理 论 练 习 题 第 25 页 共 42 页

其中ByRef的含义是。

A)传值调用 B)传址调用 C)形式参数 D)实际参数

解析:ByRey在过程定义中为可选项,表示该参数按地址传递。ByRey是VBA的默认选项。ByVal表示参数按值传递。

29.在Access中,DAO的含义是 。(2007年9月) A)开放数据库互相应用编辑窗ICl B)数据库访问对象 C)Active数据对象 D)数据库动态连接库

解析:数据库访问对象(DAO)是VBA提供的一种数据访问接口,包括数据库创建、表和查询的定义等工具,借助VBA代码可以灵活地控制数据访问的各种操作。 30.下列不是分支结构语句的是 。(2007年9月)

A)If?Then?EndIf B)While?Wend

C)If?Then?Else?Endlf D)Select?Case?EndSelect 解析:While…Wend为循环语句,其语句结构中没有分支语句。

31.在窗体中使用一个文本框(名为n)接收输入的值,有一个命令按钮run,事件代码如下:

Private Sub run_Click() Result=\ For i=1 To Me!n Forj=1 To Me!n result=result+\ Nextj Result=result+Chr(13)+Chr(10) Next i MsgBox result End Sub result的值是****■■换行符****■■换行符****■■换行符****■■换行 注意: 将 Result=\及MsgBox result放在for ?next i 内将如何?见3131(改) 打开窗体后,如果通过文本框输入的值是4,单击命令按钮后输出的图形是 。(2007年9月)

A)* * * * B) *

VBA理 论 练 习 题 第 26 页 共 42 页

* * * * * * * * * * * * * * * * * * * * * * * * * *

C) * * * * D) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

解析:典型的循环结构,For…Next语句的执行步骤见考点9,按其步骤执行最后结果是A。

32.在窗体中有一个标签Lbl和一个命令按钮Commandl,事件代码如下: Option Compare Database

Dim a As String*10 ‘a为字符型变量,其长度为10,作用域为模块 Private Sub Commandl_Click()

a=\‘a=“■■■■■■1234” b=Len(a) Me.Lhl.Caption=b End Sub

打开窗体后单击命令按钮,‘窗体中显示的内容是——。(2007年9月) A)4 B)5 C)10 D) 40

解析:DimaAsString * 10定义a为定长为10的字符串,Len(a)的值就是10,所以b的值也是10,最后窗体中显示的内容为10。

33.在窗体中有一个标签Label0,标题为“测试进行中”;有一个命令按钮Commandl,事件代码如下:

Private Sub Commandl_Click() ‘后执行 LabelO.Caption=\标签\ End Sub

Private Sub Form_Load() ‘先执行 Form.Caption=\举例\

Commandl.Caption=\移动\ End Sub

注意:窗体事件:格式举例:form_open Open 打开:

VBA理 论 练 习 题 第 27 页 共 42 页

Close 关闭 :

Load 加载: 当窗体打开时,并且显示了它的记录时发生,显然此事件发生在

Open之后。

Unload 卸载:当窗体关闭时,且记录被卸载,从屏幕上消失之前发生,此事件在Close之前发生。

Resize 调整大小:窗体第一次显示时发生。

解析:本题所给命令按钮的事件为,单击命令按钮时标签信息显示“标签”,运行窗体显示“举例”,命令按钮显示“移动”,因此D正确。 二、填空题

1.数据结构分为逻辑结构和存储结构,循环队列属于逻辑结构。(2005年9月) 解析:所谓数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构,它在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。而所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。因此,循环队列不需要存放元素

A B

C

D

VBA理 论 练 习 题 第 28 页 共 42 页

之间的前后件关系,所以它属于逻辑结构。

2.建立了一个窗体,窗体中有一个命令按钮,单击此按钮,将打开一个查询,查询名为“qT',,如果采用VBA代码完成,应使用的语句是Docmd.OpenQuery"qT"。(2005年9月) ? Docmd对象:

1.打开窗体操作:Docmd.OpenForm formname 例:Docmd.OpenForm "VB1"

2.打开报表操作:Docmd.OpenReport reportname 例:Docmd. OpenReport "1报表的结构"

3.关闭操作:Docmd.Close [objecttype][,objectname]

例1: Docmd.Close acForm "VB1" ‘关闭窗体:VB1

例2: Docmd.Close acReport "报表1" ‘关闭报表:报表1 例3: Docmd.Close ‘关闭当前窗体 例4: Docmd.Quit ‘退出Access系统 解析:在Access中,可以使用Docmd对象的RunMacro方法从VBA代码过程中运行宏。由于打开查询的宏操作为OpenQuery,所以从VBA中打开查询qT的代码为Docmd.OpenQuery"qT"。 3.设有以下窗体单击事件过程:

Private Sub Form_Click() a=1

For i=1 To 3 Select Case i Case 1,3 a=a+1 Case 2,4 a=a+2 End Select Next i

MsgBox a End Sub

打开窗体运行后,单击窗体,则消息框的输出内容是5.(2005年9月) 解析:SelectCase结构运行时,首先计算“表达式’,的值。它可以是字符串或者数值变量或表达式。然后,会依次计算测试每个Case表达式的值,直到值匹

VBA理 论 练 习 题 第 29 页 共 42 页

配成功,程序会转入相应的Case结构内执行语句。本题中,当i=1和3时,执行a=a+1,当i=2时,执行a=a+2,所以a:1十l十2十1=5。

4.在窗体中添加一个命令按钮(名为Commandl)和一个文本框(名为text1),然后编写如下事件过程:

Private Sub Commandl_Click()

Dim x As Integer,y As Integer,z As Integer x=5:y=7:z=0 Me!Text1=\ Call P1(x,y,z) Me!Textl=z End Sub

Sub pl(a As Integer,b AsInteger,c As Integer) c=a+b End Sub

打开窗体运行后,单击命令按钮,文本框中显示的内容是12。(2005年9月) 解析:由于VBA中,默认情况下,参数是按地址传递(ByRef),结果会返回。本题中z的值等于x/y,所以文本框中显示的内容为12。

5.有一个VBA计算程序的功能如下,该程序用户界面由4个文本框和3个按钮组成。4个文本框的名称分别为Textl、Text2、Text3和Text4,3个按钮分别为清除(名为Commandl)、计算(名为Command2)和退出(名为Command3)。窗体打开运行后,单击“清除”按钮,则清除所有文本框中显示的内容;单击“计算”按钮,则计算在Textl、Text2和Text3三个文本框中输入的3科成绩的平均成绩并将结果存放在Text4女本框中;单击“退出”按钮则退出。试将下列程序填空补充完整。(2005年9月)

Private Sub Commandl_Click( ) Me!Textl=\ Me!Text2=\ Me!Text3=\ Me!Text4=\ End Sub

Private Sub Command2_Click( )

If Me!Textl=\ MsgBox \成绩输入不全\ Else

VBA理 论 练 习 题 第 30 页 共 42 页

Me!Text4=Val(Me!Text1)+Val(Me!Text2)+Val(Me!Text3))/3 If End

End Sub

Private SubCommand3_Click( ) Docmd.Quit End Sub

解析:由题目可知,Text4中存放的是3科成绩的平均成绩,所以要把3个科目的成绩加起来除以3,因此第1个空应该填Val(Me!Textl),获得输入科目的成绩;If…Else…End lf语句中,缺少结束语句,所以第2个空应该填End If Command3的功能是退出,而退出有两种,一种是退出窗体,一种是退出Access,如果是退出窗体,则使用Close方法,如果是退出Access,则使用Quit方法。 6.在窗体中添加一个命令按钮,名称为Commandl,然后编写如下程序: Private Sub Commandl_Click() Dim s,I As integer S=0

For i=1 To 10 S=S+i Next i MsgBox s End Sub

打开窗体运行后,单击命令按钮,则消息框的输出结果为55。(2006年4月) 解析:For ... Next语句能够重复执行程序代码区域特定的次数。此题中i赋初值l,步长默认为l,即求1到10的和,所以结果为55。

7.在窗体中添加一个名称为Commandl的命令按钮,然后编写如下程序: Private Sub s(ByVal p As Integer) P=p*2 End Sub

Private Sub Commandl Click() Dim i As Integer i=3

Call s(i)

If i>4 Then i=i^2 MsgBox i End Sub

? 注意1:Private Sub s(ByVal p As Integer) 按值传递数据;

VBA理 论 练 习 题 第 31 页 共 42 页

? 注意2:Private Sub s(ByRef p As Integer) 按地址传递数据,并为默认状态.

打开窗体运行后,单击命令按钮,则消息框的输出结果为3.(2006年4月) 解析:由于VBA中,传值调用(BYVal选项)为“单向”作用形式,即过程调用只是相应位置实参的值“单向”传送给形参处理,而被调用过程内部对形参的任何操作引起的形参值的变化均不会反馈、影响实参的值。此题中形参p被说明为ByVal值传递形式的整型量,当运行Commandl_Click()过程并调用。调用s(i)时,实参i传送其值给形参p,p发生变化p=p*2=3*2=6。但因为使用的是ByVal“单向”传值形式,实参i的值不发生变化,If语句为假,执行MsgBox i语句后输出3。 8.窗体中有两个命令按钮:“显示” (控件名为cmdDisplay)和“测试”(控件名为cmdTest)。以下事件过程的功能是:单击“测试”按钮时,窗体上弹出一个消息框。如果单击消息框的“确定”按钮,隐藏窗体上的“显示”命令按钮;单击“取消”按钮关闭窗体。按照功能要求,将程序补充完整。(2006年4月); Private Sub cmdTest_Click( )

Answer=MsgBox("隐藏按钮",vbOKCancel) If Answer=vbOK Then

cmdDisplay.Visible=False Else

Docmd.Close End lf End Sub

解析:在VBA中,调用MsgBox函数显示消息框,同时根据考点函数MsgBox的相应说明可知,本题的第一空应该是MsgBox,该消息框的显示文字为“隐藏按钮”,具有“确定”和“取消”两个按钮。

题目中代码运行后,当单击消息框中的“确定”按钮后,Answer=vbOk为真,根据题目要求可知,此时应当隐藏cmdDisplay命令按钮,当该按钮的Visible属性为False时,该按钮不可见,因此第二空为False。

答案:MsgBox(\,vbOKCancel)或MsgBox(\,vbOKCancel,\、False 9.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码: Private Sub Commandl_Click( ) Static b As Integer b=b+1 End Sub

打开窗体运行后,三次单击命令按钮后,变量b的值是3。(2006年9月)

VBA理 论 练 习 题 第 32 页 共 42 页

解析:静态变量b的初始值为0,每单击一次命令Commandl都会执行一次“b=b+1”的操作,三次单击命令按钮后,变量b=0+1+1+1,等于3。 10.下面VBA程序段运行时,内层循环总次数是9。(2006年9月)

For m=0 To 7 Step 3 For n=m-1 TO m+1 Next n Next m

解析:外层循环For m=0 To 7 step 3从0到7,每运行一次加3,外层循环运行一次,内层循环3次,所以3*3=9,内层循环的循环总次数是9次。 11.在窗体中添加一个命令按钮(名称为Commandl),然后编写如下代码: Private Sub Commandl_Click( ) Dim b,k As Integer For k=1 to 6 b=23+k Next k MsgBox b+k End Sub

打开窗体运行后,三次单击命令按钮,消息框的输出结果是36。(2006年9月) 解析:在程序中For循环运行了6次,当k=6时,b=23+6=29,,在循环结束后,k=k+1=7时,b+k=29+7=36。

12.退出Access应用程序的VBA代码是Docmd.Quit。(2007年4月)

解析:退出Access应用程序的VBA代码是Docmd.Quit或Application.Quit,或Quit。答案:Docmd.Quit或Application.Quit或Quit

13.在VBA编程中检测字符串长度的函数名是Len( )。(2007年4月)

解析:在VBA编程中字符串长度检测函数为Len(<字符串表达式>或<变量名>)。 14.若窗体中已有一个名为Commandl的命令按钮、一个名为Labell的标签和一个名为Textl的文本框,且文本框的内容为空,然后编写如下事件代码: Private Function f(x As Long) As Boolean lf x Mod 2=0 Then f=True Else

f=False End If End Function

VBA理 论 练 习 题 第 33 页 共 42 页

PrivateSub Commandl_Click( ) Dim n As Long n=Val(Me!text1)

p=IIf(f(n),\ Me!Label1.Caption=n & \ End Sub

打开窗体运行后,在文本框中输入21,单击命令按钮,则标签显示内容为 21isodd number。(2007.04)

解析:函数过程也可以称为函数,是一系列由Function和End Function语句包含起来的Visual Basic语句。Function过程和Sub过程类似,但函数过程可以返回一个值。此题定义一个整型变量Long并把n的值赋予它,n为文本框Textl输入字符转换为数值型的值;当在文本框中输入21,则n的值为21,代人Function函数过程,x为21,对x取模,为偶数时返回True,为奇数时返回False;21是奇数,因此返回False;IIf函数调用格式:IIf(条件式,表达式1,表达式2),条件式为True,函数返回表达式1的值,条件式为False,函数返回表达式2的值。此处P返回表达式2的值odd number;&用来强制两个表达式做字符串连接,则最后标签显示内容为21isod dnumber。 注意:文本框接收的21是数值还是字符串? 15.有如下用户定义类型及操作语句:

Type Student SNo As String SName As String IAge As Integer End Type

Dim Sm As Student With Stu

.SNo=\ .SName=\陈果果\ .IAge=19 End With

执行MsgBox Stu.IAge后,消息框输出结果是19。(2007年4月)

解析:此题先定义一个自定义数据类型,包含学号、变长字符串;姓名、变长字符串;年龄、整型。给此3个变量赋值为.SNo=\、.SName=\陈果果\、.IAge=19,执行MsgBox Stu.IAge后,消息框输出.IAge变量的值19。

VBA理 论 练 习 题 第 34 页 共 42 页

16.已知一个名为“学生”的Access数据库,库中的表stud存储学生的基本信息,包括学号、姓名、性别和籍贯。下面程序的功能是:通过图12.3所示的窗体向stud表中添加学生记录,对应“学号”、“姓名”、“性别”和“籍贯”的4个文本框的名称分别为tNo、tName、tSex、tRes。当单击窗体中的“增力口”命令按钮(名称为Commandl)时,首先判断学号是否重复,如果不重复则向stud表中添加学生记录;如果学号重复,则给出提示信息。

试依据所要求的功能,将如下程序补充完整:(2007年4月)

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

打开窗口时,连接Access数据库

Set ADOcn=CurrentProject.Connection End Sub

Private Sub Commandl_Click( ) '增加学生记录

Dim strSQL As String

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

ADOrs.Open\学号 From Stud Where 学号=\ If Not ADOrs.EOF Then

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

'增加新学生的记录

strSQL=\学号,姓名,性别,籍贯)

strSQL=strSQL+\ ADOcn.Execute strSQL

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

ADOrs.Close

Set ADOrs=Nothing End Sub

解析:EOF指示当前记录位置位于Recordset对象的最后一个记录之后,属性返回布尔型值。使用BOF和EOF属性可以确定Recordset对象是否包含记录,或者从一个记录移动到另一个记录时是否超出Recordset对象的限制。如果EOF属性为TRUE,则没有当前记录。执行IF语句时如果表中已有相同学号的记录,则显示“你

VBA理 论 练 习 题 第 35 页 共 42 页

输入的学号已存在,不能增加!”;如果没有则向表中添加录入的记录strSQL。 答案:EOF strSQL

17.在VBA中双精度的类型标识是#。(2007年9月)

解析:在VBA编程中双精度数的类型标识是Double,符号是#。 例: 或 dim x As Double

18.在窗体中使用一个文本框(名为x)接收输入值,有一个命令按钮test,事件代码如下:

PrivateSub test Click( ) y=0

For i=0 To Me!x y=y+2*i+1 Next i MsgBox y End Sub

打开窗体后,若通过文本框输入的值为3,单击命令按钮,输出的结果是16。(2007年9月)

解析:函数执行过程如下: x=0,y=y+2*i+1=0+1=1; x=1,y=y+2*i+1=1+2+1=4; x=2,y=y+2*i+1=4+4+1=9; x=3,y=y+2*i+1=9+6+1=16; 输出的结果为16。

19.在窗体中使用一个文本框(名为numl)接收输入值,有一个命令按钮runl3,事件代码如下:

Private Sub runl3_Click( ) If Me!numl>=60 Then Result=\及格\

Else If Me!numl>=70 Then Result=\通过\

Else If Me!numl>=85 Then Result=\合格\

x=123.35 x#=123.35

VBA理 论 练 习 题 第 36 页 共 42 页

End lf

MsgBox result End Sub 打开窗体后,若通过文本框输入的值为85,单击命令按钮,输出结果是及格。(2007年9月)

解析:本题中,输入的值为85,执行第一个IF语句时,满足条件,直接执行Result=\及格\,后面的所有Else lf语句都不在执行,因此输出结果为\及格\。 20.现有一个登录窗体如图所示。打开窗体后输入用户名和密码,登录操作要求在20s内完成,如如在20s内没有完成登录操作,则倒计时到达0s时自动关闭登录窗体,窗体的右上角显示倒计时的文本框Itime。事件代码如下,要求填空完成事件过程。(2007年9月) Option Compare Database Dim flag As Boolean Dim i As Integer

Private Sub Form_Load( )

Flag=True

Me.TimerInterval=1000

i=0 End Sub

Private Sub Form_Timer( )

If flag=True And i<20 Then Me!ITimer.Caption=20-i i=i+1 Else

DoCmd.Close End lf End Sub

Private Sub OK_Click( )

名称为:ITimer VBA理 论 练 习 题 第 37 页 共 42 页

'登录程序略

'如果用户名和密码正确,则flag=False End Sub

解析:在窗体的初始化函数Form_Load()中,Flag作为Boolean类型的数据用来识别用户是否登录,根据“如果用户名和密码正确,则flag=False”,可以看出,初始情况下应该设置为True;在Form_Timer()函数中,参数i的作用是实现计时,因为Me!ITimer.Caption=20-i,所以要实现倒计时,必须使i的值递增,所以i=i+1。

第四部分(同步自测)

一、选择题(1~15)

1.以下程序段运行后,消息框的输出结果是B)。 a=sqr(3)

b=sqr(2) c=a>b

MsgBox c+2

A) -1 B)1 C)2 D)出错

2.执行语句:MsgBox \,vbOKCancel+vbQuestion,\之后,弹出的信息框外观样式是C). 注:vbQuestion等价于32

A B VBA理 论 练 习 题 第 38 页 共 42 页

3.用于获得字符串Str从第2个字符开始的3个字符的函数是A)。

A) Mid(Str,2,3) B) Middle(Str,2,3) C) Right(Str,2,3) D) Left(Str,2,3) 4.VBA中定义符号常量可以用关键字是A)。 A)Const B)Dim C)Public D)Static 5.以下关于运算优先级比较,叙述正确的是。 A)算术运算符,逻辑运算符,关系运算符 B)逻辑运算符,关系运算符,算术运算符 C)算术运算符,关系运算符,逻辑运算符 D)以上均不正确

6.VBA的逻辑值进行算数运算时,True的值被当作。 A)0 B)-1 C)1 D)任意值

7.VBA中实用参数a和b调用有参数过程Area(m,n)正确形式是。

A)Area m,n B)Area a,b C)Call Area(m,n) D)Call Area a,b 8.能够实现从指定记录集里检索特定字段值的函数是。 A) Nz B) DSum C) DLookup D) Rnd

9.已知str1=\全国\计算机等级考试\,则函数len(strl)、len(str2)、len(str3)返回值分别为。

VBA理 论 练 习 题 第 39 页 共 42 页

A)1、11、0 B)0、13、0 C)0,13,10 D)1,13,10 10.以下是替换字符串中指定字符的函数过程

Function sReplace(SearchLine As String,SearchFor As String,

Replace With As String) As String

Dim vSearchLine As String,found As Integer found=InStr(Searchline,SearchFor) vSearchLine=SearchLine If found<>0 Then VsearehLine=""

If Dim Presserve arr(arraycount)

vSearchLine=vSearchLine+Right$(SearchLine,Len(SearchLine)-Len(SearchFor)+1) End If

End lf

sReplace=vSearehLine End Function

过程中的空白处应该为。

A)ReDim arr(arraycount) B)Redim Presserve arr(arrycount) C)Dim art(arraycount) D)Dim Presserve arr(arraycount) 11.以下过程的功能是向数组中增加字符,则程序中空白处应为。

Private Sub AddToArray(alr$( ),arraycount%,ByVal charstring$) Dim i%,found As Boolean Found=False

For i=1 To arraycount

If Attay(i)=charstrlng Then Found=ture Next i

If Not Found Then

Arraycound=arraycount+1

ReDim Presserve art(arraycount)

arr(arraycount)=charstring

End lf End Sub

A)ReDim arr(arraycount) B)ReDim Presserve art(arraycount) C)Dim ag(arraycount) D)Dim Presservearr(arraycount) 12.以下是统计字符串中特定字符个数和的函数:

VBA理 论 练 习 题 第 40 页 共 42 页

Private Function CountOccurences%(ByVal Searchln$,ByValSearchFor$) Dim Number As Long,Pos As Long Pos=InStr(Searchln,SearchFof) Do While Pos<>0 Number=Number+1

Pos=InStr(Pos+1,Searchln,SearchFor) Loop

CountOecurences=Number End Function

程序中的两个空白处应分别为。

A)Pos<>0, Pos+1 B)Pos<>0, Poso-1 C)Pos=0, Pos+1 D)Pos=0, Pos-1 13.下面Main过程运行之后,则变量J的值为。 Private Sub MainSub( ) Dim J As Integer J=5

Call GetData(J) End Sub

Private Sub GetData(ByRef f As Integer) f=f*2+Sgn(-1) End Sub

A) 5 B) 7 C) 9 D) 10

14.假定窗体上有一个命令按钮(Commandl),有如下事件过程: Private Sub Commandl_Chck( ) Dim x As InteSer x=1 n=0

Do While x<28 x=x*3 n=n+1 Loop

Msgbox x End Sub

程序运行后,单击按钮,输出结果为。 A) 81 B) 56 C) 28 D) 243

15.在窗体上画一个名称为Text1的文本框,一个名称为commandl的命令按钮,

VBA理 论 练 习 题 第 41 页 共 42 页

然后编写如下事件过程:

PriVale Sub Commandl_Click( ) n=Val(Textl.text) If n\\2=n/2 Then f=f1(n) Else

f=f2(n) End If

MsgBox f & \ End Sub

Public Function f1(ByRef x) x=x*x f1=x+x End Function

Public Function f2(ByVal x) x=x*x f2=x+x+x End Function

程序执行后,在文本框中输入6,然后单击命令按钮,消息框输出的是。 A) 72 36 B) 108 36 C) 72 6 D) 108 6 . 二、填空题 (1~5):

1.VBA全称是Visual Basic for Aplication。 2.说明变量最常用的方法,是使用Dim...As结构。

3.用户定义的数据类型可以用Type...End Type关键字间说明。

4.以下是一个竞赛评分程序。8位评委,去掉一个最高分和一个最低分,计算平均分,试填空补充完整。

Private Sub Form_Click( )

Dim Max As Integer,Min As Integer

Dim i As Integer,x As Integer,s As Integer Dim p As Single Max=0 Min=0 s=0

For i=1 to 8

x=Val(InputBox(\请输入分数:\

VBA理 论 练 习 题 第 42 页 共 42 页

If x>Max Then Max=x If x

s=s-Min-Max p=s/6

MsgBoxr\最后得分:\ End Sub

5.以下程序的功能是:从键盘上输入若干个数字,当输入负数时结束输入,统计出若干数字的平均值,输出结果,试填空补充完整。 Pribate Sub Form_click( ) Dim x,y As Single Dim z As Integer

x=InputBox(\ Do while x>=0 y=y+x z=z+1

x=InputBox(\ Loop

If z=0 Then z=1 End If y=y/z MsgBox y End Sub

(试题结束)

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

Top