Word VBA:批量转PDF且保留书签
目錄
一、前提說明
1.討論范圍
2.示例文檔說明
二、Word自帶轉PDF方法
1.另存
2.打印
3.導出
(1)點擊【文件】-【導出】-【創建PDF/XPS文檔】
?(2)點擊上圖右側【創建PDF/XPS文檔】,在彈出的導出按鈕中,也有【選項】按鈕,點擊可以在對話框中設置導出PDF時的標簽選項
三、VBA代碼另存和導出和手動的差別
1.另存
2.導出
(1)方法
(2)參數
(3)示例代碼
四、批量操作代碼
1.示例代碼
2.注意
一、前提說明
1.討論范圍
這里只討論通過Word軟件自帶的方法完成生成PDF時創建PDF標簽的方法,外部插件不在探討和研究范圍
2.示例文檔說明
?示例文檔示例文檔里面有兩處標題和一處書簽。
二、Word自帶轉PDF方法
1.另存
點擊【文件】-【另存為】,格式選【PDF】
手動【另存】菜單?可以看到在保存選項中,有根據標題和Word書簽創建書PDF簽選項的選項。
2.打印
點擊【文件】-【打印】,選擇虛擬打印機最好的微軟自帶的
【打印】菜單?可以看到,在【打印機屬性】中是沒有PDF標簽的設置選項的
3.導出
(1)點擊【文件】-【導出】-【創建PDF/XPS文檔】
導出-1?(2)點擊上圖右側【創建PDF/XPS文檔】,在彈出的導出按鈕中,也有【選項】按鈕,點擊可以在對話框中設置導出PDF時的標簽選項
導出-2?綜上測試與觀察,得出結論:
手動方式中,可以通過另存和導出兩種方式,完成Word轉PDF時根據Word標題或書簽創建PDF標簽的任務。
| 另存 | 是 |
| 打印 | 否 |
| 導出 | 是 |
三、VBA代碼另存和導出和手動的差別
注:這里以另存激活文檔(當前正打開的文檔)為PDF舉例
1.另存
另存至少需要寫兩個參數:文件名和格式
Sub 另存PDF_不能創建書簽() ActiveDocument.SaveAs2 fileName:="E:\Zhuomian_CJ\Test01.PDF", fileFormat:=wdFormatPDF End Sub但是,Word VBA另存的方法中是沒有創建PDF書簽的參數的,通過官方文檔也可以證實:
?另存方法概覽 ?另存【SaveAs2】參數1 ?另存【SaveAs2】參數2此外,我們打開一個用上述這段代碼另存的一個文件:
?查看【另存】方法的PDF文件有無書簽也可以再次證實上述結論。
至此,可以總結:
如果需要用VBA批量操作,我們就只能通過【導出】的方式達到生成PDF同時創建PDF書簽的要求。
| 另存 | 否 |
| 打印 | 否 |
| 導出 | 是 |
2.導出
(1)方法
我們可以通過【ExportAsFixedFormat】或者【ExportAsFixedFormat2】方法進行導出,二者的區別中此處可以不用管。
(2)參數
通過官方文檔,可以看到所有參數
?導出函數和參數概覽 導出【ExportAsFixedFormat2】的參數-1?這里,前兩個參數是導出的文件路徑和文件格式,必須要寫。
導出【ExportAsFixedFormat2】的參數-2?這里,剪頭標記的參數【CreateBookmarks】,通過說明可以看到就是選擇生成PDF時書簽的參數。
具體怎么設置呢?點擊紫色文字
?繼續看一下官方文檔:
?書簽選項枚舉可以清楚看到,三類書簽選項的枚舉常量名稱、值及其說明,此參數根據需要選擇即可。
(3)示例代碼
A.根據Word標題創建PDF書簽
我們將文檔導出到前面演示相同的位置,格式為PDF,書簽參數選擇上圖中的第1種
Sub 導出PDF_根據Word標題創建書簽()ActiveDocument.ExportAsFixedFormat2 outputfilename:="E:\Zhuomian_CJ\Test01.PDF", _ExportFormat:=wdExportFormatPDF, createBookMarks:=wdExportCreateHeadingBookmarks End Sub我們看看生成的PDF文件
Word標題生成的PDF書簽可以看到,PDF中只有Word文檔中兩處標題對應的書簽。
B.根據Word書簽創建PDF書簽
我們將文檔導出到前面演示相同的位置,格式為PDF,書簽參數選擇上圖中的第3種
Sub 導出PDF_根據Word書簽創建書簽()ActiveDocument.ExportAsFixedFormat2 outputfilename:="E:\Zhuomian_CJ\Test01.PDF", _ExportFormat:=wdExportFormatPDF, createBookMarks:=wdExportCreateWordBookmarks End Sub我們看到生成的PDF書簽效果:
?Word書簽生成的PDF書簽可以看到只有Word書簽的內容,和官方說明文檔完全一樣,沒有問題。
四、批量操作代碼
1.示例代碼
Rem 這里是主程序,會對主文件夾及其各級文件夾下所有Word文件執行導出操作'可以先把要操作的文件整理有一個文件夾下,以免有多余文件導出 Sub 批量導出PDF主程序()Dim fd As FileDialogDim fso As ObjectDim arr() '存儲每次遍歷到的文件夾的子文件夾Dim brr() '臨時存儲每次遍歷到的文件夾的子文件夾Dim crr() '存儲所有文件夾Dim drr() '存儲所有Word文件路徑Dim myFolder As ObjectDim subFolder As VariantDim i As LongDim j As LongDim m As LongDim myFile As ObjectDim 后綴 As StringDim t0 As SingleDim 書簽類型 As Longt0 = Timeri = 0: j = 0: m = 0Set fd = Application.FileDialog(msoFileDialogFolderPicker)Set fso = CreateObject("Scripting.FileSystemObject")With fd.Title = "選擇主文件夾"If .Show Theni = i + 1ReDim Preserve crr(1 To i)crr(i) = .SelectedItems(1)arr = crr書簽類型 = CLng(Trim(InputBox("請輸入書簽類型:" & vbCrLf & "0--不創建書簽" _& vbCrLf & "1--根據Word標題創建書簽" & vbCrLf & "2--根據Word書簽創建書簽", "書簽類型", 1)))Do While Not InStr("012", CStr(書簽類型)) > 0Select Case MsgBox("輸入不符合要求,請:" & vbCrLf & "重新輸入(是)" & vbCrLf & "退出程序(否):", vbInformation + vbYesNo, "錯誤提示")Case vbYes書簽類型 = CLng(Trim(InputBox("請輸入書簽類型:" & vbCrLf & "0--不創建書簽" _& vbCrLf & "1--根據Word標題創建書簽" & vbCrLf & "2--根據Word書簽創建書簽", "書簽類型", 1)))Case vbNoExit SubEnd SelectLoopOn Error Resume NextDo While Err.Number = 0For j = LBound(arr) To UBound(arr)Set myFolder = fso.GetFolder(arr(j))If myFolder.subFolders.Count > 0 ThenFor Each subFolder In myFolder.subFoldersi = i + 1ReDim Preserve crr(1 To i)crr(i) = subFolder.Pathm = m + 1ReDim Preserve brr(1 To m)brr(m) = subFolder.PathNextEnd IfNextm = 0arr = brrErase brrLoopOn Error GoTo 0i = 0For j = LBound(crr) To UBound(crr) ' Debug.Print j, crr(j)Set myFolder = fso.GetFolder(crr(j))For Each myFile In myFolder.Files后綴 = fso.GetExtensionName(myFile.Path)If 后綴 Like "doc*" And Not 后綴 Like "*~$*" Theni = i + 1ReDim Preserve drr(1 To i)drr(i) = myFile.PathEnd IfNextNextFor j = LBound(drr) To UBound(drr)Rem 此處以下為調用的處理過程Application.ScreenUpdating = FalseCall 導出PDF_創建書簽(drr(j), 書簽類型)Application.ScreenUpdating = TrueRem 此處以上為調用的處理過程Debug.Print Format(j, String(Len(CStr(UBound(drr))), "0")), drr(j), "導出完成"NextEnd IfEnd WithSet fd = NothingSet fso = NothingSet myFolder = NothingOn Error Resume NextDebug.Print "完成 共導出" & UBound(drr) & "個文件為PDF 用時" & Timer - t0 & "秒" End SubSub 導出PDF_創建書簽(文件名, 書簽類型 As Long)Dim aDoc As DocumentDim fso As ObjectDim 文件名1 As StringSet aDoc = Documents.Open(文件名)Set fso = CreateObject("Scripting.FileSystemObject")文件名1 = fso.GetBaseName(文件名)aDoc.ExportAsFixedFormat2 outputfilename:=aDoc.Path & "\" & 文件名1 & ".PDF", _ExportFormat:=wdExportFormatPDF, CreateBookMarks:=書簽類型aDoc.Close wdDoNotSaveChangesSet aDoc = NothingSet fso = Nothing End Sub2.注意
會對所選主文件夾及其各級文件夾下所有Word文件執行導出操作。(注釋也有說明)
總結
以上是生活随笔為你收集整理的Word VBA:批量转PDF且保留书签的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VBA操作WORD(二):替换字符(含空
- 下一篇: smtp服务器地址