VBA程序设计习题
一. 程序基本结构
1. 窗体上有一个名称为Command1的命令按钮和两个名称分别为Text1、Text2的文本
框,编写如下事件过程: Private Sub Command1_Click() Dim x As Integer
Select Case Text1.Value Case Is < 0 x = 0 Case 1, 3, 5, 7 x = 1 Case 2, 4, 6, 8 x = 2 Case Else x = 3 End Select Text2.Value = x End Sub
(1). 如果在文本框Text1中输入-10,单击Command1按钮,则在Text2中显示的内
容是()。
(2). 如果未在文本框Text1中输入内容,单击Command1按钮,则在Text2中显示
()。
2. 阅读下面程序:
subcal()
Dim intTotal As Integer Dim iAs Integer intTotal = 0
For i = 0 To 20 step 5 intTotal = intTotal + i Next i End sub
(1). 该段程序正常运行,会做()次循环。 (2). 第2次循环结束后,i的值是(),intTotal的值是()。 3. 用户输入10个整数,统计奇数个数存入变量oddNum,偶数个数存入变量evenNum,
在下划线处填入合适的代码。 Sub 奇偶数统计()
Dim i As Integer, numInput As Integer
Dim oddNum As Integer, evenNum As Integer
For i = 1 To ___ step 1 numInput = InputBox(\请输入整数:\ if __________ then oddNum=oddNum+1
1/ 5
else ________________ End if _________
Msgbox\偶数个数:\,奇数个数:\ End Sub 以下3题至少选作一题: 4. 求最小值。
Sub 求最小() Dim a as Integer,b as Integer,c as Integer Dim intMin as Integer a =val(InputBox(\请输入a的值:\ b =val(InputBox(\请输入b的值:\ c =val(InputBox(\请输入c的值:\ (你的代码) Msgbox \求出最小值是:\End Sub
5. 输入变量x和y的值,如果y>x就交换x和y的值,使x>y,否则弹出对话框显示
“不需要交换”。 Sub 交换()
Dim x As Integer, y As Integer, z As Integer x = Val(InputBox(\请输入x的值:\ y = Val(InputBox(\请输入y的值:\ (你的代码)
End Sub
6. 通过if-then语句结构完成商品打折金额计算,2000元及以下95折,2001-3000元
9折,3001-5000元85折,5000元以上8折,计算结果保存至变量y中,并通过msgbox输出。 Sub 商场促销()
Dim x As Single, y As Single x = InputBox(\请输入商品金额:\商场促销\
(你的代码)
MsgBox \打折后的金额是:\元\打折显示\End Sub
二. 过程与函数
1. 在窗体上添加一个命令按钮command1 和两个名称分别为label1和label2的标签,
2/ 5
在通用声明段声明变量x和y,并编写如下事件过程: Private x As Integer, y As Integer Private Sub Command1_Click() Call getXY(5, 3)
Label1.Caption = x: Label2.Caption = y End Sub
Sub getXY(a As Integer, b As Integer) x = a * b y = a + b End Sub
单击Command1后,标签Label1显示();标签Label2显示()。
2. 完成函数s,实现n的阶乘运算,单击Command1按钮,调用函数s,显示Text1
文本框的值对应的阶乘。 Function s(n As Integer) As Long Dim k as Integer ___________
For k = 1 To____ s = s * k Next k End Function
Private Sub Command1_Click() x = Text1.Value
MsgBox x & \的阶乘是\? End Sub
3. 完成函数reverse,实现将字符串翻转的功能,即如果输入“abcd”,则输出“dcba”。
Function reverse(strOrigin As String) As String Dim iAs Integer Dim iLen As Integer iLen = Len(_____) i = iLen
Do While i> 0
reverse = _______ + Mid(strOrigin, i, 1) i = ________ Loop End Function
三. ADO数据访问
窗体有两个文本框“Text类别号”和“Text类别名”,当在“Text类别号”文本框输入类别ID后,通过程序在“产品类别”表中查找对应的类别名称,并赋值给“Text类别名”文本框,如果未找到,则要求用户重新输入,请完成下列程序。 Private Sub Text类别号_AfterUpdate() Dim cn As New ADODB.Connection
Dim rst As New ADODB.Recordset Set cn = CurrentProject.Connection
3/ 5
rst.Open \类别名称 from 产品类别 where 类别ID=\& Me.__________, cn, adOpenForwardOnly, adLockOptimistic If rst.RecordCount> 0 Then Me.Text类别名 = ________ Else
MsgBox \类别号输入错误,请重新输入!\Me.Text类别号.SetFocus End If rst.Close
Set rst =___________ '释放对象变量rst End Sub
四. 综合编程
1. 编写竞赛评分程序,输入8位评委的分数,去掉一个最高分,计算平均分(设满分
为10分)。
Public Sub 评分() Dim iAs Integer
Dim max As Integer, iSum As Integer Dim intFS As Integer
max = 0
For i = 1 To 8
intFS = Val(InputBox(\请输入分数:\
If intFS> max Then ______________ iSum =______________ Next i
iSum =______________
MsgBox \最后得分:\ End Sub 2. 窗体“计时器”中有1个标签label1和两个命令按钮command1、command2, label1
用于显示计时时钟。command1是“暂停/继续”复用按钮,计时器工作时,单击则为暂停,计时器暂停时,单击则继续开始计时;command2用于计时器再次重新开始。窗体如下图所示。
4/ 5
完成窗体代码:
Private Sub Command1_Click() If Me.TimerInterval = 0 Then Me.TimerInterval = 1000 Else
Me.TimerInterval =_______________ End If End Sub
Private Sub Command2_Click()
Me.Label1.Caption = _________________ End Sub
Private Sub Form_Timer()
Me.Label1.Caption = DateAdd(\End Sub
3. 查询窗体如下图所示,输入姓名,单击【查询】按钮,系统呈现符合条件的数据;
姓名未输入时,呈现所有记录。“姓名”文本框名称“txtName”,【查询】按钮名称“cmdQuery”,显示查询结果的子窗体控件名称“fDetail”。
完成cmdQuery单击事件代码,实现题目功能。 Private Sub cmdQuery _Click() Dim strSQL As String
strSQL = \学生 where 姓名 '\fDetail.Form.RecordSource = End Sub
5/ 5