VBA程序设计范例教学总结.docx
《VBA程序设计范例教学总结.docx》由会员分享,可在线阅读,更多相关《VBA程序设计范例教学总结.docx(15页珍藏版)》请在冰豆网上搜索。
VBA程序设计范例教学总结
VBA程序设计范例
高考VBA程序设计解析
一、累加和问题:
1、基本问题
问题:
编程计算1+2+3+…+100;
程序界面:
源代码:
PrivateSubCommand3_Click()
DimsAsInteger
DimiAsInteger
s=0
Fori=1To100Step1
s=s+i
Nexti
Text1.SetFocus
Text1.Value=s
EndSub
PrivateSubCommand4_Click()
DoCmd.CloseacForm,"VBA程序设计范例1"
EndSub
2、问题拓展
拓展1:
编程计算1+3+5+7+…+99;
源代码修改:
Fori=1To99Step2
s=s+i
Nexti
拓展2:
编程计算2+4+6+8+…+100;
源代码修改:
Fori=2To100Step2
s=s+i
Nexti
拓展3:
编程计算1+2+3+…+N;
程序界面:
源代码:
PrivateSubCommand10_Click()
DimiAsInteger
DimsAsInteger
Text3.SetFocus
IfTrim(Text3.Text)=Space(0)Then
MsgBox"请输入N的值!
",vbOKOnly
ExitSub
ElseIfVal(Text3.Text)<1Then
MsgBox"请输入大于1的正整数!
",vbOKOnly
ExitSub
EndIf
s=0
Fori=1ToVal(Text3.Value)Step1
s=s+i
Nexti
Text8.SetFocus
Text8.Value=s
EndSub
拓展4:
编程计算1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+4+…+100);
程序界面:
源代码:
PrivateSubCommand3_Click()
DimiAsInteger,jAsInteger
Dims1AsInteger,s2AsDouble
s1=0
s2=0
Fori=1To100Step1
s1=0
Forj=1Toi
s1=s1+j
Nextj
s2=s2+s1
Nexti
Text1.SetFocus
Text1.Text=s2
EndSub
拓展5:
编程计算1+(1+3)+(1+3+5)+(1+3+5+7)+…+(1+3+5+7+…+99);
源代码:
PrivateSubCommand3_Click()
DimiAsInteger,jAsInteger
Dims1AsInteger,s2AsDouble
s1=0
s2=0
Fori=1To50Step1
s1=0
Forj=1Toi*2-1step2
s1=s1+j
Nextj
s2=s2+s1
Nexti
Text1.SetFocus
Text1.Text=s2
EndSub
3、算法相关问题
编程计算1*2*3*…*100;
提示:
内存变量的数据类型的确定;
二、排序问题
1、基本问题
问题:
提示用户输入两个数,比较其大小;
源代码:
PrivateSubCommand4_Click()
Dima1AsString
Dima2AsString
Dimb1AsInteger
Dimb2AsInteger
Text0.SetFocus
a1=Trim(Text0.Text)
Text2.SetFocus
a2=Trim(Text2.Text)
Ifa1=Space(0)Ora2=Space(0)Then
MsgBox"请输入两个待比较的数!
",vbOKOnly
ExitSub
EndIf
b1=Val(a1)
b2=Val(a2)
Text8.SetFocus
Ifb1Text8.Text="小于"
ElseIfb1=b2Then
Text8.Text="等于"
Else
Text8.Text="大于"
EndIf
EndSub
2、问题拓展
拓展1:
有一组数:
3,2,7,1,5,4,12,10,8,6,请找出这组数的最小(大)值;
程序界面:
源代码:
PrivateSubCommand4_Click()
DimmaxvalueAsInteger
DimminvalueAsInteger
Dimarr(1To10)AsInteger
arr
(1)=3
arr
(2)=2
arr(3)=7
arr(4)=1
arr(5)=5
arr(6)=4
arr(7)=12
arr(8)=10
arr(9)=8
arr(10)=6
maxvalue=arr
(1)
minvalue=arr
(1)
Fori=2To10
Ifarr(i)>maxvalueThen
maxvalue=arr(i)
EndIf
Ifarr(i)minvalue=arr(i)
EndIf
Nexti
Text2.SetFocus
Text2.Text=maxvalue
Text3.SetFocus
Text3.Text=minvalue
EndSub
拓展2:
有一组数:
3,2,7,1,5,4,12,10,8,6,请按升序排序输出这组数;
程序界面:
源代码:
PrivateSubCommand4_Click()
Dimarr(1To10)AsInteger
arr
(1)=3
arr
(2)=2
arr(3)=7
arr(4)=1
arr(5)=5
arr(6)=4
arr(7)=12
arr(8)=10
arr(9)=8
arr(10)=6
Fori=1To9
Forj=i+1To10
Ifarr(i)>arr(j)Then
temp=arr(i)
arr(i)=arr(j)
arr(j)=temp
EndIf
Nextj
Nexti
Text2.SetFocus
Fori=1To10
Text2.Text=Text2.Text&arr(i)&","
Nexti
EndSub
拓展3:
输入一组数,请按升序排序输出这组数;
程序界面:
源代码:
PrivateSubCommand6_Click()
Dimarr(1To10)AsInteger
DimiAsInteger
DimjAsInteger
DimtempAsInteger
Dims1AsString
Fori=1To10
arr(i)=InputBox("请输入第"&i&"个数:
")
s1=s1&arr(i)&","
Nexti
Text1.SetFocus
Text1.Value=s1
Fori=1To9
Forj=i+1To10
Ifarr(i)>arr(j)Then
temp=arr(i)
arr(i)=arr(j)
arr(j)=temp
EndIf
Nextj
Nexti
Text3.SetFocus
Fori=1To10
Text3.Text=Text3.Text&arr(i)&","
Nexti
EndSub
三、窗体设计
1、基本问题
源代码:
PrivateSubCommand11_Click()
OnErrorGoToErr_Command11_Click
DoCmd.GoToRecord,,acFirst
Exit_Command11_Click:
ExitSub
Err_Command11_Click:
MsgBoxErr.Description
ResumeExit_Command11_Click
EndSub
PrivateSubCommand12_Click()
OnErrorGoToErr_Command12_Click
DoCmd.GoToRecord,,acPrevious
Exit_Command12_Click:
ExitSub
Err_Command12_Click:
MsgBoxErr.Description
ResumeExit_Command12_Click
EndSub
PrivateSubCommand13_Click()
OnErrorGoToErr_Command13_Click
DoCmd.GoToRecord,,acNext
Exit_Command13_Click:
ExitSub
Err_Command13_Click:
MsgBoxErr.Description
ResumeExit_Command13_Click
EndSub
PrivateSubCommand14_Click()
OnErrorGoToErr_Command14_Click
DoCmd.GoToRecord,,acLast
Exit_Command14_Click:
ExitSub
Err_Command14_Click:
MsgBoxErr.Description
ResumeExit_Command14_Click
EndSub
2、问题拓展
拓展1:
窗体查询1
源代码:
SQL查询部分:
SELECT*FROM学生学籍
WHERE姓名likeforms!
窗体查询_主子窗体1.text2.text;
子窗体的源对象设置为查询对象;
查询按钮单击事件代码:
PrivateSubCommand6_Click()
DimstudnameAsString
Text2.SetFocus
studname=Trim(Text2.Text)
Ifstudname=Space(0)Then
MsgBox"请输入学生姓名!
",vbOKOnly
Else
Me.Child8.Requery
EndIf
EndSub
拓展2:
窗体查询2
源代码:
SQL查询部分:
SELECT学生学籍.班级编号,学生学籍.学号,学生学籍.姓名,学生成绩.学期,学生成绩.语文,学生成绩.数学,学生成绩.英语,学生成绩.专业一,学生成绩.专业二,学生成绩.总分
FROM学生学籍INNERJOIN学生成绩ON(学生学籍.学号=学生成绩.学号)AND(学生学籍.班级编号=学生成绩.班级编号)
WHERE姓名likeforms!
窗体查询_主子窗体2.text2.text;
子窗体的源对象设置为查询对象;
查询按钮单击事件代码:
PrivateSubCommand6_Click()
DimstudnameAsString
Text2.SetFocus
studname=Trim(Text2.Text)
Ifstudname=Space(0)Then
MsgBox"请输入学生姓名!
",vbOKOnly
Else
Me.Child8.Requery
EndIf
EndSub