APP下载

基于VBA的PPT问答式复习系统的设计与实现

2020-07-09王宏杰许丽娟

视界观·上半月 2020年1期

王宏杰 许丽娟

摘    要:传统的问答式课前复习是在PPT里编辑和排版题目,教师即要思考题目也要兼顾题目在PPT中的版式布局。数据与视图混为一体,导致教师核心精力分散,也使得题目维护的工作量较大。利用VBA技术能有效解决这一问题,VBA自动从Excel中读取题目展示到PPT中,实现题目数据与展示视图的分离,教师只需专注在Excel中维护题库,排版展示工作交给VBA实施。

关键词:VBA;PPT;Excel;question bank

引言

作者曾对独立院校的学情做过调查分析,并提出:在学生主动学习能力差的情况下,切实开展课前复习能有效帮助学生消化吸收上节课的知识。同时,作者通过实践发现,问答式课前复习是一种行之有效的方法:根据上一节课的知识点整理若干道题目,以问答的方式在课前展开复习。

但问答式课前复习对教师提出了更高的要求:根据章节整理出题目,并且将之排版形成PPT。后续对题目进行增删改等维护时,就得维护相应排版,也就是说,题目与展示混合在一起,使得维护的工作量增大了。

对此,本文提出基于VBA的PPT问答式复习系统,以 Microsoft Excel作为编辑、存储题目的后台“数据库”,以Microsoft PowerPoint作为前端视图,以VBA技术作为中间控制器自动读取Excel中的题目展示到PPT中,实现前后端分离。教师只需在Excel中维护题目,排版展示工作交給系统自动完成,从而减少教师工作量。同时,系统以PPT为宿主,可以集成在教师原PPT课件中,相当于为原课件扩展了复习功能。

一、技术基础

(一)VBA

VBA(Visual Basic For Application)是美国微软公司在Visual Basic基础上开发出来,应用于其桌面应用程序的一种自动化任务编程语言。1993年,VBA开始出现在Microsoft Excel和Microsoft Project中入[1],以满足用户在特定领域对Office基本功能扩展的需求。目前,VBA已集成于Microsoft Office的大多数产品中,包括Word、Excel、PowerPoint、Outlook等。

本系统使用的VBA是基于Microsoft PowerPoint 2016的Microsoft visual Basic for Application 7.1。

(二) ActiveX控件

ActiveX是微软公司对一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。ActiveX控件,是可以在应用程序中重复使用的程序对象,它的主要技术是ActiveX。VBA编辑器提供的ActiveX控件比较丰富,本系统使用到的有:命令按钮控件、标签控件、文本框控件、List Box控件等。

二、系统设计

(一)功能设计

系统以 Microsoft Excel作为编辑、存储题目的后台“数据库”,以Microsoft PowerPoint作为前端视图,以PowerPoint自带的VBA作为核心技术,实现前后端分离,如图1所示。

通过PPT上的命令按钮,用户触发系统,系统启动后读取Excel中的章节、题目信息,自动在当前PPT中新增幻灯片,并按照一定的布局版式展示每道题目。同时,每个题目幻灯片上有“查看答案”按钮,点击时动态显示答案。题目和答案的内容支持文字和图片。

(二)前端视图设计

PPT(教师原课件)作为题库的前端视图,用于展示题目。题目在Excel中有多道,系统对每道题在原PPT最前面新增一个幻灯片用于展示。Excel中每道题目由多行组成,对于每一行,幻灯片采用一个新的文本框存放其内容。题目题型(填空、判断、单选、多选)展示在答案区域的文本框中,当用户点击“查看按钮”时,答案区域的文本框内容由题型变为答案[2]。题目在幻灯片中的版式布局如图2所示。

(三)后端数据库设计

Excel作为 “数据库”,用于编辑、存储题目,形成题库。题目设计规则如下:

(1)Excel文件。题库以课程的章为单位,一章一个Excel文件,文件以“xxx复习题”格式命名,和PPT放在同一目录下。

(2)Excel工作表。一个Excel文件里面可以有多个工作表(sheet)。一个工作表为一次复习题,可以有多道题目,工作表表名要符合实际且通俗易懂,如“2.1常量与变量”或“第2章第1次复习”等。

(3)题目设计规范。为了方便VBA程序快速、准确的从表中读取题目到PPT中,设定以下规范:

①工作表的第1列为标识列。只能是以下标识:“{”是题目开始标识,标注在题目开始处;“}”是题目结束标识,标注在题目结束的下一行;大写字母A-Z是选项标识,标注在选择题处;“img”是图片标识,标注在图片顶部位置。如图3、图4所示。

②工作表的第2列为题目内容。题目内容是图片时,图片宽度不要超过第2列的列宽。当然,可以通过调整第2列的列宽,使得内容适当。如图3、图4所示。

③工作表的第3列为答案内容。其中,“FALSE”、“TRUE”,表示判断题,代表错、对;单个大写字母A-Z,表示单选题,代表单选答案;多个大写字母A-Z,表示多选题,代表多选答案;“img”,表示填空题且答案是图片,图片放在“img”标识下,不要超过题目范围。其余答案内容,视为填空题。如图3、图4所示。

三、系统实施

(一)题库初始化

按照上述规则新建Excel文件,将题目按小节或其他方式录入在工作表中。Excel文件的存放路径与PPT保持一致。

(二)修改幻灯片空白版式

为了统一采用图2的幻灯片版式布局,本系统通过修改幻灯片母版的空白版式实现。具体方法为:在PPT中通过“视图”打开“幻灯片母版”,选中“空白版式”,然后通过“开发工具”在空白版式上新增一个命令按钮(ActiveX控件),通过属性修改该控件标题为“查看答案”。其余布局通过VBA动态实现。

(三)引用Excel对象库

以PPT为宿主的VBA不能直接使用Excel相关对象和函数,需要先加载Excel对象库,具体方法为:在PPT中打开“开发工具”,点击“Visual Basic”进入VBA编辑器。通过“工具”引用“Microsoft Excel 16.0 Object Library”[3]。

(四)启动及交互确认

(1)系统触发。在教学PPT的第一页新增一个命令按钮控件“课前复习”,用于触发系统。系统启动后寻找并打开当前PPT路径下的“xxx复习题”Excel文件,读取每个工作表里第一列的标识信息,记录每道题在表格中的起止位置即 “{”、“}”标识所在的行。为了方便,本系统自定义了一个新数据类型,用于存储工作表名(章节名)以及每道题目的位置,具体代码如下:

'自定义类型,用于存放章节名以及题目在表格中的起止位置

Public Type TYPE_SAQP  'SectionAndQuestionPositon

section As String   '章節名

questionpos() As Integer    '所有题目的起止位置

End Type

全局变量,保存每个章节工作表的名称以及里面每道题的起止位置

Public PUB_arr_SAQP() As TYPE_SAQP

(2)章节选择窗口。从前面得到的章节名和题目起止位置数组中提取章节名,计算出题目数量,形成二维数组,加载到章节选择窗口的ListBox控件中(如图5,该控件设置为两列,需要二维数组才能初始化),以便用户选择需要生成复习题的章节。

(五)题目在幻灯片中展示

当题目内容为文本时,可以直接通过Excel的cells函数取到单元格内容,然后赋值给幻灯片的文本框。但题目内容为图片时,就不能这样直接赋值。所以,需要根据题目是否有图片分别处理:

(1)题目为纯文本时。此时表格第1列没有图片标识,系统为每道题目在原PPT最前面新增一张空白版式的幻灯片作展示。从题目的开始行到结束行,每行对应在幻灯片题目区域新建一个文本框,通过cells函数读取该行第2列的内容赋值给文本框。部分代码如下:

'幻灯片母版中空版式对应的索引是7

Set mylayout = ActivePresentation.SlideMaster.CustomLayouts(7)

'每道题目新增一个幻灯片来展示

For i = 0 To questionnum - 1

'第i+1道题新增为第i+1个幻灯片,名字为“复习x”

ActivePresentation.Slides.AddSlide(i + 1, mylayout).Name = "复习" & i

'工作表里的所有题目的位置信息依次保存在数组中

startrow = arr_QuestionPostion(i * 2)   '题目开始行

endrow = arr_QuestionPostion(i * 2 + 1) '题目结束行

...

'对于每道题,xls中的每一行对应在幻灯片中新增一个文本框

mytop = 80 '第一个文本框的初始位置top值

For m = startrow To endrow - 1

imagestr = xlsSheet.Cells(m, 1) '读取第1列数据,判断是否有图片

'当本行没有图片标识时

If (imagestr <> IMAGEFLAG And xlsSheet.Cells(m, 2) <> "") Then

Set myshap = ActivePresentation.Slides(i + 1). _

Shapes.AddTextbox(1, 40, mytop, 450, 30) '新增文本框

myshap.Name = "questioncontent-" & (m - startrow) '文本框命名

If (m = startrow) Then  '题目第一行需要加入序号

myshap.TextFrame2.TextRange.Text = (i + 1) & _

"、" & xlsSheet.Cells(m, 2)

Else

If typestr = "判断题" Or typestr = "填空题" Then

myshap.TextFrame2.TextRange.Text = xlsSheet.Cells(m, 2)

Else

'选题时,需要加xls中第一列的选项信息,如A、xxx

myshap.TextFrame2.TextRange.Text = _

xlsSheet.Cells(m, 1)& "、" & xlsSheet.Cells(m, 2)

mytop = mytop + myshap.Height '下一个文本框的位置

(2)题目包含图片时。此时表格第1列有图片标识,由于图片默认是浮在单元格之上的,所以无法直接获取图片。本系统采用的方法是:遍历当前工作表中的所有形状(Shapes),如果某形状的左上角坐标在某题目第2列范围内,则认为该形状是本题目的图片;然后在表格中拷贝该形状,粘贴到幻灯片中;最后在幻灯片里调整该图片的位置,使其位于题目区域。部分代码如下:

If (imagestr = IMAGEFLAG) Then '当本行有图片标识时

top1 = xlsSheet.Cells(startrow, 2).Top

top2 = xlsSheet.Cells(endrow, 2).Top

left1 = xlsSheet.Cells(startrow, 2).Left

left2 = left1 + xlsSheet.Cells(startrow, 2).Width

Set xlspicshps = xlsSheet.Shapes '当前表格里的所有形状

For n = 1 To xlspicshps.Count

'遍历xls中所有形状,判断其左上角坐标是否在范围内

If (xlspicshps(n).Top > top1 And xlspicshps(n).Top < top2 _

And xlspicshps(n).Left > left1 And xlspicshps(n).Left < left2) Then

xlsSheet.Shapes(xlspicname).Copy '对xls中的形状进行拷贝

'粘贴前幻灯片里面形状的数量

shpnum = ActivePresentation.Slides(i + 1).Shapes.Count

'向幻灯片中粘贴形状

ActivePresentation.Slides(i + 1).Shapes.Paste

'粘贴进来的形状在幻灯片里的索引值为shpnum+1 Set myshap = ActivePresentation.Slides(i + 1).Shapes(shpnum + 1)

'调整形状的位置到题目区域

myshap.Left = 40

myshap.Top = mytop

mytop = mytop + myshap.Height + 5   '图片间隔5单位

(3)答案为纯文本时。根据表格第3列的内容,系统依照规则判断当前题目是什么类型(填空、判断、单选、多选),并將题型写在答案文本框中。点击“查看答案”按钮时,更新答案文本框内容为题目答案。部分代码如下:

'答案区域文本框初始化

Set myshap = ActivePresentation.Slides(i + 1). _

Shapes.AddTextbox(1, 550, 140, 130, 30) '在答案区域新增文本框

myshap.Name = "typeanswer-" & i '答案文本框命名

myshap.Fill.BackColor.RGB = VBA.RGB(230, 230, 230) '答案文本框设置为灰色

myshap.TextFrame2.TextRange.Text = typestr '题型

...

' 点击“查看答案时”按钮时,答案文本框显示答案

'当前放映的幻灯片名字,如复习0

slidename = SlideShowWindows(1).View.Slide.Name

tempstr = Replace(slidename, "复习", "")

myindex = Int(tempstr)

'全局二维数组PUB_arr2_TypeAndAnswer保存了题型和答案

answerstr = PUB_arr2_TypeAndAnswer(myindex, 1) '答案

answershpname = "typeanswer-" & myindex '答案文本框对应的名字

...

'更新答案文本框内容为题目答案

ActivePresentation.Slides(slidename).Shapes(answershpname). _

TextFrame2.TextRange.Text = answerstr

...

(4)答案为图片时。表格第3列为“img”时,表示答案为图片,采用之前的图片处理方法:从工作表中拷贝答案图片,粘贴到幻灯片中,调整图片位置到答案区域,然后将图片设置为隐藏,点击“查看答案”时,使图片显示。效果如图6所示。

四、结论

本系统以Excel为题目“数据库”,以PPT为视图展示,利用VBA技术实现了数据与视图的分离。使得教师只需在Excel中专注题目本身的设计,无需关心题目在PPT中的排版展示,能有效提升教师的工作效率,从而进一步推动课前复习的实施,提升教学效果。

参考文献:

[1]朱建国. PPT新视角-VBA应用技术[M].北京:电子工业出版社,2013

[2]李永强.PowerPoint VBA技术在多媒体教学练习课件中的运用[J].江汉石油职工大学学报,2011,24(05):58-60+66.

[3]陈永强,李茜,陈海川.例学VBA—Excel/Access/PowerPoint中的VBA高效引用[M].北京:中国铁道出版社,2010

基金项目:广东财经大学华商学院计算机科学与技术一流专业建设项目(HS2019CXQX06)

作者简介:王宏杰(1982-),男,湖北襄阳人,硕士研究生,助教,研究方向为人工智能、深度学习;

许丽娟(1979-),女,青海乐都县人,硕士研究生,副教授,研究方向为图像识别 、数据挖掘。

通信作者:王宏杰