之前在 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\"
之後有時間想再簡化原本的程式碼
因為有些判斷資料是否存在跟是否在最後一列的方式
感覺有點瑣碎,想試試看有沒有更直覺的方法