王宏杰 許麗娟



摘? ? 要:傳統的問答式課前復習是在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-),女,青海樂都縣人,碩士研究生,副教授,研究方向為圖像識別 、數據挖掘。
通信作者:王宏杰