很多人都不知道在PPT中,利用VBA能夠輕松調取Excel中數據,通過一張幻燈片就可以做若干習題。下面就跟小編一起來看看如何將PPT與Excel完美結合做練習。
在課堂上,許多老師都是用PPT進行課堂練習。一般情況下,有多少道練習題就用多少張幻燈片。這樣的做法存一個弊端:就是要想將幻燈片中的試題修改成統一的字體或字號,需要一張一張地去修改。如果試題所用的幻燈片少了,這樣的方法還行;但是,試想一下,有幾十道、上百道練習題,如果要一張一張地修改,那實在是一件很麻煩、很費神的事。
筆者經過不斷研究,終於想到了一個非常行之有效的方法:就是將你所需要的若干試題存放在一個Excel工作表中,然後在PPT中利用VBA讀取Excel工作表中的數據到幻燈片中,這樣只需要一張幻燈片就可以練習若干道習題了。要修改的話,只需要修改這一張幻燈片中的文本框就可以了。如果你想知道這種方法是怎麼實現的,就請跟我來吧!
准備工作表和幻燈片
這個過程主要是准備好存放試題的Excel工作表和顯示試題的幻燈片。
首先,准備好一個Excel文件,在Sheet1工作表中存放好所需要試題,並將這個Excel文件和PPT文件放在同一文件夾中。然後,打開PowerPoint 2003,插入一張空白幻燈片。在這張幻燈片中先插入兩個文本框,它們的作用一個是用於存放試題題目,一個用於存放正確答案(在存放試題題目的文本框中可先輸入一個提示性語句,在存放正確答案的文本框中可先輸入一個空格)(圖1)。
最後,選擇“幻燈片放映→動作按鈕”菜單,在幻燈片的合適位置插入5個動作按鈕。可右擊相應的動作按鈕為它們添加相應的文字(圖2)。
添加VBA代碼
這個過程主要是編寫控制Excel工作表和PPT幻燈片中文本框的VBA代碼。
一提到編寫代碼,你可能就有些犯暈了。其實,程序代碼也沒那麼神秘,在這裡你可先將我的代碼輸入或復制到你的文件中,然後看看我給你的解釋,一切就簡單多了!
首先,我們選擇“工具→宏→Visual Basic編輯器”菜單,這時就會彈出Microsoft Visual Basic程序窗口,也就是VBA的編輯器。選擇“插入→模塊”菜單,這時在右側可以看到空白的代碼編輯區域,我們可以嘗試著輸入圖中代碼(圖3)。
看著這些代碼,你有些摸不著頭腦了吧!沒關系,你看看我給你解釋解釋,你就豁然開朗了。
在上述代碼中,首先用Public定義了xlApp、xlBook、xlSheet、i這4個變量,前3個是用來控制Excel工作表的,i是用來表示當前Excel工作表中的行數的。
然後,用了5個“Sub…End Sub”定義了5個事件過程,VBA中的事件都是放在Sub和End Sub之間的,每個過程都有一個相應的名字,如打開題庫()、下一題()等等。
現在我們來說明一下“打開題庫()”這個過程:
Set xlApp = CreateObject("Excel.Application")是用來建立一個Excel控件;
xlApp.Visible = False表示這個控件不可見,即隱藏Excel,不讓它顯示在當前窗口;
Set xlBook = xlApp.Workbooks.Open(CurDir() + "\book1.xls")表示讓Excel打開名字為book1.xls的文件,CurDir()表示當前目錄。
Set xlSheet = xlBook.Worksheets(1)表示把控制工作簿中的第1個工作表即Sheet1的權限賦給xlSheet。
ActivePresentation表示當前激活的演示文稿。
.Slides(1)表示演示文稿中的第1張幻燈片,.Shapes(1)表示幻燈片中的第1個文本框。
.TextFrame.TextRange.Text則表示文本框中的文本。
我們把它們連接起來即ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text表示當前演示文稿中第1張幻燈片中第1個文本框的內容。
xlSheet.Range("a" & i)表示Sheet1中單元格的值,現在i=3,就獲取了A3單元格的值。
Replace函數的作用是替換,Chr(10)代表換行符,Chr(13)代表回車符,Replace(xlSheet.Range("b" & i), Chr(10), Chr(13))就表示把B3單元格中的換行符替換成回車符。
“&”這個符號起到連接的作用,可用來強制連接不同類型的值。
而整個語句ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = xlSheet.Range("a" & i) & "、" & Replace(xlSheet.Range("b" & i), Chr(10), Chr(13))表示將工作表Sheet1中單元格A3的值加上“、”再加B3中將換行符替換成回車符後的值一起賦給幻燈片中的第一個文本框。
在“下一題()”這個過程中,i=i+1表示將工作表中當前行下移一行,即現在是第3行,i+1後就可以取第4行的值了。這個過程應用了IF語句進行條件判斷,判斷是不是已到題庫尾,如果xlSheet.Range("a" & i) 的值不是空,就取相應的值賦給題目文本框;否則,用msgbox()函數進行消息的提示。同時為了不提示顯示正確答案,ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange.Text = " "表示讓幻燈片中的第二個文本框即正確答案文本框顯示為空格。
解釋了這麼多,這下你明白些了吧?那麼其他的過程和它的意思都是大同小異的,你理解理解就明白了。
為按鈕添加事件
這個過程主要是給各個按鈕添加相應的事件,即過程。
比如我們給“正確答案”這個按鈕添加事件,我們可以右擊它,選擇“動作設置”菜單,在彈出的“動作設置”窗口中選擇“運行宏”,單擊其右側箭頭選擇相應的過程,最後點擊“確定”即可。其他按鈕事件的添加和它的道理一樣的(圖4)。
激活VBA代碼
要想使這些事件即VBA代碼起作用,我們需要調整宏的安全性。選擇“工具→宏→安全性”,把宏的安全性設置為“低”,這樣你才能順利的運行VBA代碼(圖5)。
效果演示
以上的工作完成之後,我們就可以放映幻燈片了。
在使用時,我們先點擊“打開題庫”按鈕,這時就會呈現出題庫中的第1題,只有點擊“正確答案”按鈕時才會顯示相應題目的正確答案;如果點擊“下一題”按鈕,題目就會進行切換,而下一題的正確答案也不會顯示。
如果你覺得題目或是正確答案的字體、字號、顏色等不是太滿意,你只需要設置相應的文本框格式就行了。
看看,這個方法是不是特別爽呀!使用這個方法,你有多少題都沒關系的,還不趕快試試(圖6)!
*******************代碼*************
Public xlApp, xlBook, xlSheet
Public i As Integer
Sub 打開題庫()
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set xlBook = xlApp.Workbooks.Open(CurDir() + "\book1.xls")
Set xlSheet = xlBook.Worksheets(1)
i = 3
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = xlSheet.Range("a" & i) & "、" & Replace(xlSheet.Range("b" & i), Chr(10), Chr(13))
End Sub
Sub 下一題()
i = i + 1
If xlSheet.Range("a" & i) <> "" Then
ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange.Text = " "
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = xlSheet.Range("a" & i) & "、" & Replace(xlSheet.Range("b" & i), Chr(10), Chr(13))
Else
MsgBox ("已到最後一題了!")
End If
End Sub
Sub 上一題()
i = i - 1
If xlSheet.Range("a" & i) <> "" Or xlSheet.Range("a" & i) <> "序號" Then
ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange.Text = " "
ActivePresentation.Slides(1).Shapes(1).TextFrame.TextRange.Text = xlSheet.Range("a" & i) & "、" & Replace(xlSheet.Range("b" & i), Chr(10), Chr(13))
Else
MsgBox ("已是第一題了!")
End If
End Sub
Sub 正確答案()
ActivePresentation.Slides(1).Shapes(2).TextFrame.TextRange.Text = xlSheet.Range("c" & i)
End Sub
Sub 關閉題庫()
xlBook.Close (False)
xlApp.Quit
Set xlApp = Nothing
End Sub
本文來自於【系統之家】 www.xp85.com