如題,用VBA宏代碼,把幻燈片中所有文字,包括大綱視圖中不顯示的,快速提取到 Word。
造成大綱視圖下不顯示文字的原因是,創(chuàng)建幻燈片時,選擇“空白”創(chuàng)建一個空白幻燈片,再在文本框內添加文字,或直接把文字復制到幻燈片中,在這兩種情況下大綱視圖都是不顯示文字的,也無法把文字復制到 Word 或通過“創(chuàng)建講義”方式轉換成Word,主要是因為文本框中沒有占位符。
而選擇非“空白”幻燈片(如“標題幻燈片”或“標題和內容”),它們都有占位符(“單擊此處添加標題”或“單擊此處添加文本”便是占位符),這樣添加完文字,在大綱視圖下都是顯示的。
那么下面我們開始用宏代碼,把幻燈片中所有文字,快速提取到 Word:
在 PowerPoint 窗口,按 Alt + F11 打開 VBA 編輯窗口,單擊“插入”,在彈出的菜單中選擇“模塊”,新建一個模塊,把以下代碼:
Sub PPTToWord()
????On Error Resume Next
????Dim docObj As New Word.Document, shapeObj As Shape, slideObj As Slide
????For Each slideObj In ActivePresentation.Slides
????????For Each shapeObj In slideObj.Shapes
????????????docObj.Range().Text = docObj.Range() + shapeObj.TextFrame.TextRange.Text
????????Next shapeObj
????Next slideObj
????docObj.Application.Visible = True
End Sub
復制到模塊窗口,單擊“工具”,然后選擇“引用”,打開“引用”窗口,往下拖右邊的滾動條一直找到 Microsoft Word Object Liblary(Word 對象類庫),勾選它,單擊“確定”,單擊“運行”圖標,則開始把PPT轉Word,一會后轉換完成,并自動用 Word 打開。這樣,在 PowerPoint 的大綱視圖中沒有顯示的內容也提取到了 Word。操作過程步驟,如圖所示:

注意:
文字提取完,有可能順序會出錯,手動編輯下就好。
VBA 代碼說明:
A、On Error Resume Next 表示代碼執(zhí)行過程中發(fā)生錯誤后繼續(xù)往下執(zhí)行。
B、Dim docObj As New Word.Document 把 docObj 定義為 Word 的 Document(文檔)對象,shapeObj As Shape 把 shapeObj 定義為Shape(形狀)對象,slideObj As Slide 把 slideObj 定義為 Slide(幻燈片)對象。
C、ActivePresentation 表示活動(當前)窗口中的演示文稿,ActivePresentation.Slides 表示演示文稿中的所有幻燈片;slideObj.Shapes 表示形狀對象 slideObj 中的所有形狀,這里指所有幻燈片中的文本框。
D、Word 的 Range 對象用于表示文檔中的一片連續(xù)區(qū)域,它有 Start 和 End 兩個參數,Start 用于指定區(qū)域的開始字符,End 用于指定區(qū)域的結束字符,例如? Range(Start:=0, End:=5) 表示當前文檔中從第 0 個到第 5 個字符;Range() 省略了參數,表示當前文檔中所有字符,省略參數時,括號也可以省略,Range() 可以寫為 Range;Range().Text(或 Range.Text)表示一片連續(xù)區(qū)域中的文字。
E、PowerPoint 中的 TextFrame 對象表示 Shape 對象中的文本框架;TextRange 表示文本框中的文本,用于操作文本的屬性與方法。
F、For Each In ... Next 是循環(huán)語句,For Each slideObj In ActivePresentation.Slides ... Next 用于遍歷當前窗口的演示文稿中
的每個幻燈片,第一次執(zhí)行時,slideObj 表示第一個幻燈片;第二次執(zhí)行時,slideObj 表示第二個幻燈片,其它的以此類推。
H、For Each shapeObj In slideObj.Shapes ... Next 用于遍歷每個幻燈片中的所有文本框。
I、docObj.Range().Text = docObj.Range() + shapeObj.TextFrame.TextRange.Text 用于把遍歷過的文本累加起來,docObj.Range() 表示已遍歷過文本框中的文本,shapeObj.TextFrame.TextRange.Text 表示當前遍歷文本框中的文本。
J、docObj.Application.Visible = True 用于把 Word 文檔顯示出來,Visible 是顯示屬性,設置為 True,表示顯示,設置為 False,表示隱藏。
K、代碼的意思是,先用外層循環(huán)遍歷所有幻燈片,再用內層循環(huán)遍歷每個幻燈片中的所有文本框,遍歷完一個幻燈片后繼續(xù)遍歷下一個幻燈片,一直遍歷完所有幻燈片。