日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Word VBA:批量转PDF且保留书签

發布時間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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標簽的任務。

手動創建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書簽的要求。

Word VBA創建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 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 Sub

2.注意

會對所選主文件夾及其各級文件夾下所有Word文件執行導出操作。(注釋也有說明)

總結

以上是生活随笔為你收集整理的Word VBA:批量转PDF且保留书签的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。