王宏杰 許麗娟
摘? ? 要:傳統(tǒng)的問答式課前復(fù)習(xí)是在PPT里編輯和排版題目,教師即要思考題目也要兼顧題目在PPT中的版式布局。數(shù)據(jù)與視圖混為一體,導(dǎo)致教師核心精力分散,也使得題目維護(hù)的工作量較大。利用VBA技術(shù)能有效解決這一問題,VBA自動(dòng)從Excel中讀取題目展示到PPT中,實(shí)現(xiàn)題目數(shù)據(jù)與展示視圖的分離,教師只需專注在Excel中維護(hù)題庫,排版展示工作交給VBA實(shí)施。
關(guān)鍵詞:VBA;PPT;Excel;question bank
引言
作者曾對(duì)獨(dú)立院校的學(xué)情做過調(diào)查分析,并提出:在學(xué)生主動(dòng)學(xué)習(xí)能力差的情況下,切實(shí)開展課前復(fù)習(xí)能有效幫助學(xué)生消化吸收上節(jié)課的知識(shí)。同時(shí),作者通過實(shí)踐發(fā)現(xiàn),問答式課前復(fù)習(xí)是一種行之有效的方法:根據(jù)上一節(jié)課的知識(shí)點(diǎn)整理若干道題目,以問答的方式在課前展開復(fù)習(xí)。
但問答式課前復(fù)習(xí)對(duì)教師提出了更高的要求:根據(jù)章節(jié)整理出題目,并且將之排版形成PPT。后續(xù)對(duì)題目進(jìn)行增刪改等維護(hù)時(shí),就得維護(hù)相應(yīng)排版,也就是說,題目與展示混合在一起,使得維護(hù)的工作量增大了。
對(duì)此,本文提出基于VBA的PPT問答式復(fù)習(xí)系統(tǒng),以 Microsoft Excel作為編輯、存儲(chǔ)題目的后臺(tái)“數(shù)據(jù)庫”,以Microsoft PowerPoint作為前端視圖,以VBA技術(shù)作為中間控制器自動(dòng)讀取Excel中的題目展示到PPT中,實(shí)現(xiàn)前后端分離。教師只需在Excel中維護(hù)題目,排版展示工作交給系統(tǒng)自動(dòng)完成,從而減少教師工作量。同時(shí),系統(tǒng)以PPT為宿主,可以集成在教師原PPT課件中,相當(dāng)于為原課件擴(kuò)展了復(fù)習(xí)功能。
一、技術(shù)基礎(chǔ)
(一)VBA
VBA(Visual Basic For Application)是美國微軟公司在Visual Basic基礎(chǔ)上開發(fā)出來,應(yīng)用于其桌面應(yīng)用程序的一種自動(dòng)化任務(wù)編程語言。1993年,VBA開始出現(xiàn)在Microsoft Excel和Microsoft Project中入[1],以滿足用戶在特定領(lǐng)域?qū)ffice基本功能擴(kuò)展的需求。目前,VBA已集成于Microsoft Office的大多數(shù)產(chǎn)品中,包括Word、Excel、PowerPoint、Outlook等。
本系統(tǒng)使用的VBA是基于Microsoft PowerPoint 2016的Microsoft visual Basic for Application 7.1。
(二) ActiveX控件
ActiveX是微軟公司對(duì)一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中主要的技術(shù)是組件對(duì)象模型(COM)。ActiveX控件,是可以在應(yīng)用程序中重復(fù)使用的程序?qū)ο?,它的主要技術(shù)是ActiveX。VBA編輯器提供的ActiveX控件比較豐富,本系統(tǒng)使用到的有:命令按鈕控件、標(biāo)簽控件、文本框控件、List Box控件等。
二、系統(tǒng)設(shè)計(jì)
(一)功能設(shè)計(jì)
系統(tǒng)以 Microsoft Excel作為編輯、存儲(chǔ)題目的后臺(tái)“數(shù)據(jù)庫”,以Microsoft PowerPoint作為前端視圖,以PowerPoint自帶的VBA作為核心技術(shù),實(shí)現(xiàn)前后端分離,如圖1所示。
通過PPT上的命令按鈕,用戶觸發(fā)系統(tǒng),系統(tǒng)啟動(dòng)后讀取Excel中的章節(jié)、題目信息,自動(dòng)在當(dāng)前PPT中新增幻燈片,并按照一定的布局版式展示每道題目。同時(shí),每個(gè)題目幻燈片上有“查看答案”按鈕,點(diǎn)擊時(shí)動(dòng)態(tài)顯示答案。題目和答案的內(nèi)容支持文字和圖片。
(二)前端視圖設(shè)計(jì)
PPT(教師原課件)作為題庫的前端視圖,用于展示題目。題目在Excel中有多道,系統(tǒng)對(duì)每道題在原PPT最前面新增一個(gè)幻燈片用于展示。Excel中每道題目由多行組成,對(duì)于每一行,幻燈片采用一個(gè)新的文本框存放其內(nèi)容。題目題型(填空、判斷、單選、多選)展示在答案區(qū)域的文本框中,當(dāng)用戶點(diǎn)擊“查看按鈕”時(shí),答案區(qū)域的文本框內(nèi)容由題型變?yōu)榇鸢竅2]。題目在幻燈片中的版式布局如圖2所示。
(三)后端數(shù)據(jù)庫設(shè)計(jì)
Excel作為 “數(shù)據(jù)庫”,用于編輯、存儲(chǔ)題目,形成題庫。題目設(shè)計(jì)規(guī)則如下:
(1)Excel文件。題庫以課程的章為單位,一章一個(gè)Excel文件,文件以“xxx復(fù)習(xí)題”格式命名,和PPT放在同一目錄下。
(2)Excel工作表。一個(gè)Excel文件里面可以有多個(gè)工作表(sheet)。一個(gè)工作表為一次復(fù)習(xí)題,可以有多道題目,工作表表名要符合實(shí)際且通俗易懂,如“2.1常量與變量”或“第2章第1次復(fù)習(xí)”等。
(3)題目設(shè)計(jì)規(guī)范。為了方便VBA程序快速、準(zhǔn)確的從表中讀取題目到PPT中,設(shè)定以下規(guī)范:
①工作表的第1列為標(biāo)識(shí)列。只能是以下標(biāo)識(shí):“{”是題目開始標(biāo)識(shí),標(biāo)注在題目開始處;“}”是題目結(jié)束標(biāo)識(shí),標(biāo)注在題目結(jié)束的下一行;大寫字母A-Z是選項(xiàng)標(biāo)識(shí),標(biāo)注在選擇題處;“img”是圖片標(biāo)識(shí),標(biāo)注在圖片頂部位置。如圖3、圖4所示。
②工作表的第2列為題目?jī)?nèi)容。題目?jī)?nèi)容是圖片時(shí),圖片寬度不要超過第2列的列寬。當(dāng)然,可以通過調(diào)整第2列的列寬,使得內(nèi)容適當(dāng)。如圖3、圖4所示。
③工作表的第3列為答案內(nèi)容。其中,“FALSE”、“TRUE”,表示判斷題,代表錯(cuò)、對(duì);單個(gè)大寫字母A-Z,表示單選題,代表單選答案;多個(gè)大寫字母A-Z,表示多選題,代表多選答案;“img”,表示填空題且答案是圖片,圖片放在“img”標(biāo)識(shí)下,不要超過題目范圍。其余答案內(nèi)容,視為填空題。如圖3、圖4所示。
三、系統(tǒng)實(shí)施
(一)題庫初始化
按照上述規(guī)則新建Excel文件,將題目按小節(jié)或其他方式錄入在工作表中。Excel文件的存放路徑與PPT保持一致。
(二)修改幻燈片空白版式
為了統(tǒng)一采用圖2的幻燈片版式布局,本系統(tǒng)通過修改幻燈片母版的空白版式實(shí)現(xiàn)。具體方法為:在PPT中通過“視圖”打開“幻燈片母版”,選中“空白版式”,然后通過“開發(fā)工具”在空白版式上新增一個(gè)命令按鈕(ActiveX控件),通過屬性修改該控件標(biāo)題為“查看答案”。其余布局通過VBA動(dòng)態(tài)實(shí)現(xiàn)。
(三)引用Excel對(duì)象庫
以PPT為宿主的VBA不能直接使用Excel相關(guān)對(duì)象和函數(shù),需要先加載Excel對(duì)象庫,具體方法為:在PPT中打開“開發(fā)工具”,點(diǎn)擊“Visual Basic”進(jìn)入VBA編輯器。通過“工具”引用“Microsoft Excel 16.0 Object Library”[3]。
(四)啟動(dòng)及交互確認(rèn)
(1)系統(tǒng)觸發(fā)。在教學(xué)PPT的第一頁新增一個(gè)命令按鈕控件“課前復(fù)習(xí)”,用于觸發(fā)系統(tǒng)。系統(tǒng)啟動(dòng)后尋找并打開當(dāng)前PPT路徑下的“xxx復(fù)習(xí)題”Excel文件,讀取每個(gè)工作表里第一列的標(biāo)識(shí)信息,記錄每道題在表格中的起止位置即 “{”、“}”標(biāo)識(shí)所在的行。為了方便,本系統(tǒng)自定義了一個(gè)新數(shù)據(jù)類型,用于存儲(chǔ)工作表名(章節(jié)名)以及每道題目的位置,具體代碼如下:
'自定義類型,用于存放章節(jié)名以及題目在表格中的起止位置
Public Type TYPE_SAQP? 'SectionAndQuestionPositon
section As String? ?'章節(jié)名
questionpos() As Integer? ? '所有題目的起止位置
End Type
全局變量,保存每個(gè)章節(jié)工作表的名稱以及里面每道題的起止位置
Public PUB_arr_SAQP() As TYPE_SAQP
(2)章節(jié)選擇窗口。從前面得到的章節(jié)名和題目起止位置數(shù)組中提取章節(jié)名,計(jì)算出題目數(shù)量,形成二維數(shù)組,加載到章節(jié)選擇窗口的ListBox控件中(如圖5,該控件設(shè)置為兩列,需要二維數(shù)組才能初始化),以便用戶選擇需要生成復(fù)習(xí)題的章節(jié)。
(五)題目在幻燈片中展示
當(dāng)題目?jī)?nèi)容為文本時(shí),可以直接通過Excel的cells函數(shù)取到單元格內(nèi)容,然后賦值給幻燈片的文本框。但題目?jī)?nèi)容為圖片時(shí),就不能這樣直接賦值。所以,需要根據(jù)題目是否有圖片分別處理:
(1)題目為純文本時(shí)。此時(shí)表格第1列沒有圖片標(biāo)識(shí),系統(tǒng)為每道題目在原PPT最前面新增一張空白版式的幻燈片作展示。從題目的開始行到結(jié)束行,每行對(duì)應(yīng)在幻燈片題目區(qū)域新建一個(gè)文本框,通過cells函數(shù)讀取該行第2列的內(nèi)容賦值給文本框。部分代碼如下:
'幻燈片母版中空版式對(duì)應(yīng)的索引是7
Set mylayout = ActivePresentation.SlideMaster.CustomLayouts(7)
'每道題目新增一個(gè)幻燈片來展示
For i = 0 To questionnum - 1
'第i+1道題新增為第i+1個(gè)幻燈片,名字為“復(fù)習(xí)x”
ActivePresentation.Slides.AddSlide(i + 1, mylayout).Name = "復(fù)習(xí)" & i
'工作表里的所有題目的位置信息依次保存在數(shù)組中
startrow = arr_QuestionPostion(i * 2)? ?'題目開始行
endrow = arr_QuestionPostion(i * 2 + 1) '題目結(jié)束行
...
'對(duì)于每道題,xls中的每一行對(duì)應(yīng)在幻燈片中新增一個(gè)文本框
mytop = 80 '第一個(gè)文本框的初始位置top值
For m = startrow To endrow - 1
imagestr = xlsSheet.Cells(m, 1) '讀取第1列數(shù)據(jù),判斷是否有圖片
'當(dāng)本行沒有圖片標(biāo)識(shí)時(shí)
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? '題目第一行需要加入序號(hào)
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
'選題時(shí),需要加xls中第一列的選項(xiàng)信息,如A、xxx
myshap.TextFrame2.TextRange.Text = _
xlsSheet.Cells(m, 1)& "、" & xlsSheet.Cells(m, 2)
…
mytop = mytop + myshap.Height '下一個(gè)文本框的位置
…
(2)題目包含圖片時(shí)。此時(shí)表格第1列有圖片標(biāo)識(shí),由于圖片默認(rèn)是浮在單元格之上的,所以無法直接獲取圖片。本系統(tǒng)采用的方法是:遍歷當(dāng)前工作表中的所有形狀(Shapes),如果某形狀的左上角坐標(biāo)在某題目第2列范圍內(nèi),則認(rèn)為該形狀是本題目的圖片;然后在表格中拷貝該形狀,粘貼到幻燈片中;最后在幻燈片里調(diào)整該圖片的位置,使其位于題目區(qū)域。部分代碼如下:
If (imagestr = IMAGEFLAG) Then '當(dāng)本行有圖片標(biāo)識(shí)時(shí)
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 '當(dāng)前表格里的所有形狀
For n = 1 To xlspicshps.Count
'遍歷xls中所有形狀,判斷其左上角坐標(biāo)是否在范圍內(nèi)
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 '對(duì)xls中的形狀進(jìn)行拷貝
'粘貼前幻燈片里面形狀的數(shù)量
shpnum = ActivePresentation.Slides(i + 1).Shapes.Count
'向幻燈片中粘貼形狀
ActivePresentation.Slides(i + 1).Shapes.Paste
'粘貼進(jìn)來的形狀在幻燈片里的索引值為shpnum+1 Set myshap = ActivePresentation.Slides(i + 1).Shapes(shpnum + 1)
'調(diào)整形狀的位置到題目區(qū)域
myshap.Left = 40
myshap.Top = mytop
mytop = mytop + myshap.Height + 5? ?'圖片間隔5單位
…
(3)答案為純文本時(shí)。根據(jù)表格第3列的內(nèi)容,系統(tǒng)依照規(guī)則判斷當(dāng)前題目是什么類型(填空、判斷、單選、多選),并將題型寫在答案文本框中。點(diǎn)擊“查看答案”按鈕時(shí),更新答案文本框內(nèi)容為題目答案。部分代碼如下:
'答案區(qū)域文本框初始化
Set myshap = ActivePresentation.Slides(i + 1). _
Shapes.AddTextbox(1, 550, 140, 130, 30) '在答案區(qū)域新增文本框
myshap.Name = "typeanswer-" & i '答案文本框命名
myshap.Fill.BackColor.RGB = VBA.RGB(230, 230, 230) '答案文本框設(shè)置為灰色
myshap.TextFrame2.TextRange.Text = typestr '題型
...
' 點(diǎn)擊“查看答案時(shí)”按鈕時(shí),答案文本框顯示答案
'當(dāng)前放映的幻燈片名字,如復(fù)習(xí)0
slidename = SlideShowWindows(1).View.Slide.Name
tempstr = Replace(slidename, "復(fù)習(xí)", "")
myindex = Int(tempstr)
'全局二維數(shù)組PUB_arr2_TypeAndAnswer保存了題型和答案
answerstr = PUB_arr2_TypeAndAnswer(myindex, 1) '答案
answershpname = "typeanswer-" & myindex '答案文本框?qū)?yīng)的名字
...
'更新答案文本框內(nèi)容為題目答案
ActivePresentation.Slides(slidename).Shapes(answershpname). _
TextFrame2.TextRange.Text = answerstr
...
(4)答案為圖片時(shí)。表格第3列為“img”時(shí),表示答案為圖片,采用之前的圖片處理方法:從工作表中拷貝答案圖片,粘貼到幻燈片中,調(diào)整圖片位置到答案區(qū)域,然后將圖片設(shè)置為隱藏,點(diǎn)擊“查看答案”時(shí),使圖片顯示。效果如圖6所示。
四、結(jié)論
本系統(tǒng)以Excel為題目“數(shù)據(jù)庫”,以PPT為視圖展示,利用VBA技術(shù)實(shí)現(xiàn)了數(shù)據(jù)與視圖的分離。使得教師只需在Excel中專注題目本身的設(shè)計(jì),無需關(guān)心題目在PPT中的排版展示,能有效提升教師的工作效率,從而進(jìn)一步推動(dòng)課前復(fù)習(xí)的實(shí)施,提升教學(xué)效果。
參考文獻(xiàn):
[1]朱建國. PPT新視角-VBA應(yīng)用技術(shù)[M].北京:電子工業(yè)出版社,2013
[2]李永強(qiáng).PowerPoint VBA技術(shù)在多媒體教學(xué)練習(xí)課件中的運(yùn)用[J].江漢石油職工大學(xué)學(xué)報(bào),2011,24(05):58-60+66.
[3]陳永強(qiáng),李茜,陳海川.例學(xué)VBA—Excel/Access/PowerPoint中的VBA高效引用[M].北京:中國鐵道出版社,2010
基金項(xiàng)目:廣東財(cái)經(jīng)大學(xué)華商學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)一流專業(yè)建設(shè)項(xiàng)目(HS2019CXQX06)
作者簡(jiǎn)介:王宏杰(1982-),男,湖北襄陽人,碩士研究生,助教,研究方向?yàn)槿斯ぶ悄堋⑸疃葘W(xué)習(xí);
許麗娟(1979-),女,青海樂都縣人,碩士研究生,副教授,研究方向?yàn)閳D像識(shí)別 、數(shù)據(jù)挖掘。
通信作者:王宏杰