目錄
一、前提說明
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标簽的任務。
手動建立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書簽的要求。
VBA建立PDF的方式 | 能否根據Word标題或标簽建立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 FileDialog
Dim fso As Object
Dim arr() '存儲每次周遊到的檔案夾的子檔案夾
Dim brr() '臨時存儲每次周遊到的檔案夾的子檔案夾
Dim crr() '存儲所有檔案夾
Dim drr() '存儲所有Word檔案路徑
Dim myFolder As Object
Dim subFolder As Variant
Dim i As Long
Dim j As Long
Dim m As Long
Dim myFile As Object
Dim 字尾 As String
Dim t0 As Single
Dim 書簽類型 As Long
t0 = Timer
i = 0: j = 0: m = 0
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
Set fso = CreateObject("Scripting.FileSystemObject")
With fd
.Title = "選擇主檔案夾"
If .Show Then
i = i + 1
ReDim 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(書簽類型)) > 0
Select Case MsgBox("輸入不符合要求,請:" & vbCrLf & "重新輸入(是)" & vbCrLf & "退出程式(否):", vbInformation + vbYesNo, "錯誤提示")
Case vbYes
書簽類型 = CLng(Trim(InputBox("請輸入書簽類型:" & vbCrLf & "0--不建立書簽" _
& vbCrLf & "1--根據Word标題建立書簽" & vbCrLf & "2--根據Word書簽建立書簽", "書簽類型", 1)))
Case vbNo
Exit Sub
End Select
Loop
On Error Resume Next
Do While Err.Number = 0
For j = LBound(arr) To UBound(arr)
Set myFolder = fso.GetFolder(arr(j))
If myFolder.subFolders.Count > 0 Then
For Each subFolder In myFolder.subFolders
i = i + 1
ReDim Preserve crr(1 To i)
crr(i) = subFolder.Path
m = m + 1
ReDim Preserve brr(1 To m)
brr(m) = subFolder.Path
Next
End If
Next
m = 0
arr = brr
Erase brr
Loop
On Error GoTo 0
i = 0
For 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 "*~$*" Then
i = i + 1
ReDim Preserve drr(1 To i)
drr(i) = myFile.Path
End If
Next
Next
For j = LBound(drr) To UBound(drr)
Rem 此處以下為調用的處理過程
Application.ScreenUpdating = False
Call 導出PDF_建立書簽(drr(j), 書簽類型)
Application.ScreenUpdating = True
Rem 此處以上為調用的處理過程
Debug.Print Format(j, String(Len(CStr(UBound(drr))), "0")), drr(j), "導出完成"
Next
End If
End With
Set fd = Nothing
Set fso = Nothing
Set myFolder = Nothing
On Error Resume Next
Debug.Print "完成 共導出" & UBound(drr) & "個檔案為PDF 用時" & Timer - t0 & "秒"
End Sub
Sub 導出PDF_建立書簽(檔案名, 書簽類型 As Long)
Dim aDoc As Document
Dim fso As Object
Dim 檔案名1 As String
Set aDoc = Documents.Open(檔案名)
Set fso = CreateObject("Scripting.FileSystemObject")
檔案名1 = fso.GetBaseName(檔案名)
aDoc.ExportAsFixedFormat2 outputfilename:=aDoc.Path & "\" & 檔案名1 & ".PDF", _
ExportFormat:=wdExportFormatPDF, CreateBookMarks:=書簽類型
aDoc.Close wdDoNotSaveChanges
Set aDoc = Nothing
Set fso = Nothing
End Sub
2.注意
會對所選主檔案夾及其各級檔案夾下所有Word檔案執行導出操作。(注釋也有說明)