利用VBA设计课堂练习题

时间:2022-07-28 05:52:17

利用VBA设计课堂练习题

由于利用多媒体课件教学有诸多优越性,所以在提高教学质量方面,多媒体课件不失为一种很好的辅助工具。制作多媒体课件的软件也很多,如Flash,Authorware,PPT等,在实际使用时要根据教学需求和对这些软件的熟悉程度加以选用。PPT的易用性和强大功能得到了广大教师的青睐,如果结合使用VBA,PPT的灵活性、功能性、交互性、可扩展性等都会大大增强。

一、VBA简介

VBA是Visual Basic for Application的简写,它以VB(Visual Basic)语言为基础,经过修改并运行在Microsoft Office(如Excel,Word,PPT和Access)中的应用程序,是一种完全面向对象体系结构的编程语言。利用VBA可以对Office软件进行二次开发,增强Office软件的灵活性和扩展性,例如,用VBA制作PPT课件,将会使课件别具特色。VBA是一种程序语言,有自己的语法规范,初学者可以找相关书籍或查阅VBA帮助,进行学习。以下从练习题设计角度谈VBA在PPT课件中的应用。

二、VBA在PPT中的应用实例

1.准备工作

(1)建立数据库

数据库是用来存放练习题和答案的,数据库有多种,不同的数据库有不同的优缺点和适用范围,这里选用Microsoft Access即可。本例建一个名为test的数据库,这个数据库包含4个表,分别是xzt(用于存放选择题),pdt(用于存放判断题),tkt(用于存放填空题),ppt(用于存放匹配题)。选择题字段设计:xzt(题目,备选A,备选B,备选C,备选D,答案),其余根据需要仿此。使用数据库的目的是使课件更具有灵活性和可扩展性,有了数据库,只需要更新数据库练习题的内容,以后调用即可;而且答题界面可以做得很简洁,一般一种题型用一张即可。

(2)界面设计

界面的使用可以选择大家熟知的幻灯片(Slide),也可以使用Visual Basic编辑器中添加的用户窗体(UserForm),它们各有优缺点,使用幻灯片的不足之处是程序执行结果会保留在幻灯片上(重新播放时,上次结果会保留在幻灯片上,使用不太方便),要除去这些内容,还得多写代码;使用用户窗体不足之处是幻灯片启动时看不见。因此在这里把它们结合起来使用。使用一张幻灯片,作为导航界面;使用若干个用户窗体作为答题界面。执行【视图】/【工具栏】/【控件工具箱】命令,打开控件工具箱,单击控件工具箱上的命令按钮,在幻灯片的合适位置画出4个按钮,右击第一个命令按钮,在弹出的快捷菜单中单击【属性】,在打开的属性对话框中,将Caption属性改为“选择题”。用同样的方法将另外三个命令按钮的Caption属性分别改为“判断题”“填空题”“匹配题”。然后使用Alt+F11组合键(或执行【工具】/【宏】/【Visual Basic编辑器】命令)打开Visual Basic编辑器窗口,在此窗口中,执行【插入】/【用户窗体】就可插入用户窗体。在第一个用户窗体的合适位置添加两个命令按钮CommandButton1和CommandButton2,Caption属性分别为“开始”“下一题”,Enabled属性分别为真(True)、假(False);然后在适合的位置添加一个标签(Label1),用于显示题目;在适合处添加4个单选按钮(OptionButton1,OptionButton2,OptionButton3,OptionButton4),将Caption属性值分别设置为“A”“B”“C”“D”,(字母大小写一定要和数据库中“答案”中的一致),并在每个单选按钮的后边加一个标签(Label2,Label3,Label4,Label5),用于显示备选择答案。另外在不影响操作的位置加一个文本框(TextBox1),把其可见性(Visible)设置为假(False),用于暂存已经做的题目数量。第一个用户窗体作为选择题答题界面,一般一种题型用一个窗体,按需要仿窗体一设计即可。另外,界面的设计要符合界面设计原则。

2.应用实例

(1)链接数据库

①执行【工具】/【宏】/【Visual Basic编辑器】命令,打开“Visual Basic编辑器”窗口。

②引用VBA工程(VBAProject)。单击【工具(T)】/【引用(R)】,打开“引用―VBAProject”窗口,在“可使用的引用(A)”窗口中找到“Microsoft ActiveX Data Object2.6”并选中,单击【确定】。

③单击【插入】/【模块】,就新建了一个模块,默认名称是“模块1”。

④双击“模块1”并添加以下代码:

Public adocon As ADODB.Connection

Public adorst As ADODB.recordset '在模块中建立公共数据对象

Sub MAIN()

Set adocon = New ADODB.Connection

If adocon.State= adStateOpen And Not IsEmpty(adStateOpen) Then adocon.Close

adocon.Provider ="microsoft.jet.oledb.4.0"

adocon.ConnectionString ="test.mdb"

adocon.Open

'建立记录集

Set adorst = New ADODB.Recordset

adorst.ActiveConnection = adocon

adorst.CursorLocation = adUseClient

adorst.CursorType = adOpenDynamic

adorst.LockType = adLockOptimistic

End Sub

(2)利用VBA设计选择题

①单击第一个用户窗体中的“开始”按钮

Private Sub CommandButton1_Click() '开始按钮

CommandButton1.EnabledFalse

CommandButton2.EnabledTrue

TextBox1.Text = 1 '初始化题目量

Call MAIN

adorst.Source = "xzt"

adorst.Open , , , , adCmdTable

Label1.Caption = adorst.Fields(0)

Label2.Caption = adorst.Fields(1)

Label3.Caption = adorst.Fields(2)

Label4.Caption = adorst.Fields(3)

Label5.Caption = adorst.Fields(4)

End Sub

②单击第一个用户窗体中的“下一题”按钮

Private Sub CommandButton2_Click()

Dim i As Integer

CommandButton3.Enabled = True

TextBox1.Text = TextBox1.Text + 1

i = TextBox1.Text

Call MAIN

adorst.Source ="xzt"

adorst.Open , , , , adCmdTable

If i

adorst.AbsolutePosition =i

'指向第i条记录

Label1.Caption = adorst.Fields(0)

Label2.Caption = adorst.Fields(1)

Label3.Caption = adorst.Fields(2)

Label4.Caption = adorst.Fields(3)

Label5.Caption = adorst.Fields(4)

End If

End Sub

③为第一单选按钮添加代码,其余依此类推。

Private Sub OptionButton1_Click()

If OptionButton1.Caption = adorst.Fields("答案") Then

MsgBox "答对了,你真棒!"

Else

MsgBox "错了,再想想!"

End If

End Sub

④为幻灯片上的“选择题”按钮添加代码,其余依此类推。

Private Sub CommandButton1_Click()

Load UserForm1

UserForm1.Show

End if

这样就可以打开选择题答题界面。

(3)设计判断题

判断题的设计和选择题类似,只需两个单选按钮(OptionButton1,OptionButton2),这两个单选按钮的Caption属性分别设为“正确”“错误”即可,其余仿选择题。

(4)填空题的设计

只要答案是固定的,填空题也可以智能判断。在设计数据库时,要填空的地方用括号表示,在答题界面上用文本框(TextBox)作为答题的地方,再用一个命令按钮(CommandButton1)来判断。关键代码示例:

Private Sub CommandButton1_Click()

If TextBox1.Text = adorst.Fields("答案") Then

MsgBox "答对了,你真棒!"

Else

MsgBox "错了,再想想!"

End If

End Sub

(5)连线题(匹配题)的设计

用连线的方法判断正误不好设计,改变思路,把要和某项相连的对象移动到它的右边,再判断正误。这样,问题的关键转化为怎样拖动要匹配的对象。关键代码:

Dim X1, Y1 As Integer, Down As Boolean'设置全局变量,X1,Y1等为Label1等对象的初始坐标值

Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

If Not Down Then

X1=X

Y1=Y

Down = True

End If

End Sub

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

'如果鼠标已按下,设置Label1新的坐标值

If Down Then

Label1.Left = Label1.Left + X - X1

Label1.Top = Label1.Top + Y - Y1

X1=X

Y1=Y

End If

End Sub

Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

Down = False

TextBox1.Text = Label1.Caption

End Sub

以上把标签(Label1)的内容(需要拖动的对象)拖放到文本框中,就可以判断正误:

Private Sub CommandButton1_Click()

If TextBox1.Text = adorst.Fields("答案") Then

MsgBox "做对了,恭喜你!", vbOKOnly, "提示"

Else

MsgBox "做错了,还得努力啊!", vbOKOnly, "提示"

End If

End Sub

从以上代码可以看出,如果需要匹配的对象较多,就要写很多代码,如果一个标签对应一个匹配对象,每个标签都写MouseDown,MouseMove和MouseUp事件代码。解决问题的办法不是唯一的,另外一种思路:用文本框的Change事件为文本赋值,同时把标签隐藏,即可见性设置为假。具体做法是:用一个标签作为匹配对象的序号,一个标签作为匹配对象,一个文本框作为匹配对象的容器,利用文本框的Change事件,向文本框输入序号时,序号消失而将匹配对象赋予文本框,同时利用代码使用表示序号和匹配对象的标签隐藏(可见性设为假)。关键代码示例:Private Sub TextBox1_Change()

If TextBox1.Text = “1” Then

TextBox1.Text = Label2.Caption

Label1.Visible = False

Label2.Visibl= False

End If

End Sub

以上Label1用于表示序号,即Label1.Caption ="1",Label2用于显示要匹配内容。文本框赋值后,判断正误方法同上。

三、结束语

VBA在PPT中的应用很广泛,以上是对选择题、判断题、填空题、连线匹配题设计方面作的概述。程序的设计算法不同,代码的精简程度也不一样,系统的运行效率也不同。

上一篇:语文课堂“三剑客” 下一篇:小型网络填报系统的实现