VBA / 使用Word VBA批次轉換成PDF 修改版

之前在 VBA / 使用Word VBA批次轉換PDF檔使用了一個批次轉換PDF的Word VBA

原理就是利用Word自身另存新檔為PDF的功能

藉由VBA程式將這個過程自動化完成

當初在檔案裡看到

 

所以想嘗試看看自己能不能做到這2個功能

1.流水號前置文字

2.自動檢查文件是否有追踪修訂顯示

 

首先遭遇到的問題是如何在Word裡增加表單

從Word的開發-控制項可以看到會有3種控制項

1.內容控制項,這個是可以跟其他人互動的表單元件

例如把完成後的檔案給其他人填寫,然後再利用限制編輯的功能

讓表單只能在控制器欄位輸入資料

延伸應用可以參考:

Word-使用控制項來限制輸入的內容與格式
透過表單控制項製作表單樣板,讓填寫資料更加便利與方便

2.舊表單 跟 3.ActiveX控制項,兩者很像

查到的資料是說舊表單可以不需要VBA就能夠操作;而ActiveX控制項的某些功能必須用到VBA來撰寫

兩者都可以跟VBA互動,所以使用上沒什麼差別

ActiveX控制項的屬性介面就跟VBA裡的一樣

開啟屬性視窗需要先點擊 “設計模式”,才能在ActiveX控制項文字欄位上按右鍵

 

點選”內容”就會出現屬性視窗,不過也可以直接按設計模式下面的”屬性”

     

 

舊表單的屬性介面就很明白的顯示哪些可以修改

 

不過在Excel裡,兩者的功能就會有很明顯的不同,可以參考這個網頁的說明

 

再來是處理VBA程式

Word 透過 VBA 取得、寫入表單的方式 跟 Excel 一樣

所以 1.流水號前置文字  只要取得勾選啟動這個功能的核取方塊回傳值

以及要放在檔名之前的前置文字的文字欄位值,

 

2.自動檢查文件是否有追踪修訂顯示,就必須知道Word VBA如何處理追踪修訂

Word VBA透過Revisions物件來處理檔案裡所有的修訂版本的屬性與方法

如果要處理所有修訂版本中的一個修訂紀錄,可以透過Revision物件

在這邊的處理是針對檔案內的所有修訂紀錄

1) 偵測是否有追蹤修訂的紀錄-Revisions.Count 屬性

2) 如果有,接受所有的追蹤修訂-Revisions.AcceptAll 方法

因為不想變動原始檔案,所以在這之前先另存一個工作檔

另外,要注意的是Word表格的儲存格,會有2個特殊字元

 

 

這2個特殊字元是  ASCII 13 Carriage Return, ASCII  7 Bell

所以取得資料之後要再用 Left( )去掉最後2個字元

 

測試看看結果

當Word檔裡有修訂紀錄

 

轉成PDF檔,檔名也增加了 自訂的前置文字123 跟 流水號001

 

經過處理之後的PDF檔,沒有修訂紀錄

 

除了這兩個主要的功能之外,也修改了一些小細節

例如:選取檔案的對話窗的預設路徑為桌面、檔案篩選方式

'設定顯示的副檔名
fd.Filters.Add "Word File", "*.doc, *.docx"

'設定檔案選取的預設路徑 桌面
fd.InitialFileName = "%USERPROFILE%\Desktop\"

之後有時間想再簡化原本的程式碼

因為有些判斷資料是否存在跟是否在最後一列的方式

感覺有點瑣碎,想試試看有沒有更直覺的方法