延續上一篇 VBA / 使用Excel VBA將Word轉換成PDF
這次要修改彰化一整天的檔案
達成Word批次轉換成PDF的功能
由於是修改別人的檔案,因此就只呈現修改的部分
主要程序有三個
Public Sub cmdClear()
Public Sub cmdConvertPDF()
Public Sub cmdSelectFile()
以及一個自訂函數Function rinstr(),用來取得 \ 或 . 的位置
這次的修改是從PPT轉檔改成Word轉檔
所以只要修改Public Sub cmdConvertPDF()就可以了
首先是引用物件的宣告要改成引用Word library
Dim wordapp As Word.Application '宣告為Microsoft Word 檔 Dim wordfile As Word.Document '宣告為Word的Document物件
這裡是如果沒有引用的話, 忽略報錯並設定物件的引用
On Error Resume Next '忽略後續程式的報錯 Set wordapp = GetObject(, "word.Application") If wordapp Is Nothing Then Set wordapp = CreateObject("word.Application") End If On Error GoTo 0 '恢復預設狀態,即開始報錯
轉檔的部分,基本上就是前一篇的方式
這邊我加了2個判斷式
用來判斷是否為受保護檢視,以及是否有追蹤修訂
'wordapp.Visible = True wordapp.Visible = False 'wordapp.Activate '判斷是否為受保護檢視 If ProtectedViewWindows.Count > 0 Then ProtectedViewWindows(1).Edit End If '判斷是否有追蹤修訂,如果有則全部接受 If wordfile.Revisions.Count >= 1 Then wordfile.Revisions.AcceptAll End If
Public Sub cmdConvertPDF()跟Public Sub cmdSelectFile()中會引用Function rinstr()
從程序傳入兩個參數
一個是檔案的完整路徑的字串
一個是要取得位置的字元,例如:\ 跟 .
透過字串長度的迴圈,逐一利用Mid來比對是否符合,如果符合就把字元位置記錄下來
因為整個迴圈跑完就會知道目標字元所在的最後位置,也就是最後一個符合字串的位置
目的是用來切割字串,方便後面取得檔案名稱或者路徑
蠻奇妙的方式
在Public Sub cmdSelectFile()中使用了內建函數 InStr,剛好是相反的功能
是取得搜尋字串中出現的第一個目標字串位置
備註:
之前一直搞不懂為什麼 方法( 引數 ) 跟 方法 引數,例如:MsgBox( 引數 ) 跟MsgBox 引數
這兩者有什麼不同
後來才知道如果前面有個變數用來接收回傳值時,引數就需要用括號包起來
例如:result = MsgBox( 引數 )
其實我還是搞不太清楚
Dim wordapp As Word.Application 是宣告為Microsoft Word 檔,並非是Word裡的Application物件
或者可能Word裡的Application物件本身就是代表Microsoft Word 檔
參考:在 Microsoft Office 應用程式中控制其他 Microsoft Office 應用程式