❶ 如何利用excel VBA生成PDF文件
首先,載入引用,如圖
然後,在列印機中對Acrobat Distiller的列印進行設置設置(必須,否則轉化出錯!)
PublicSubMakePDF(ByValstrPDFFileNameAsString)
DimstrPSFileNameAsString
DimxlWorksheetAsWorksheet
strPSFileName = Left(strPDFFileName, InStrRev(strPDFFileName, "/")) & "tmpPostScript.ps"
SetxlWorksheet = ActiveSheet
CallxlWorksheet.PrintOut(copies:=1, preview:=False, ActivePrinter:="Acrobat Distiller", printtofile:=True, collate:=True, prtofilename:=strPSFileName)
SetobjPdfDistiller =NewPdfDistiller
CallobjPdfDistiller.FileToPDF(strPSFileName, strPDFFileName, "")
CallKill(strPSFileName)
EndSub
❷ 如何用VBA實現打開PDF並查詢數據,獲取頁碼,或是提取該頁面為新文件
打開pdf文檔,查找到指定字元串,然後插入書簽
以下代碼先設置一個待查找字元串,用findtext方法查找,然後用createchild方法插入書簽。代碼的運行環境為Win8.1,Word2010 VBA,Acrobat Pro DC,在本機測試成功。
使用到的主要方法為AVDoc.FindText和BookMark.createChild。
AVDoc.FindText有4個參數:
szText,要查找的字元串
bCaseSensitive,是否區分大小寫,正數為區分,0為不區分
bWholeWordsOnly,是否匹配整個單詞,正數為匹配,0為不匹配
bReset,查找開始的位置,正數則從第一頁開始,0則從當前頁開始
BookMark.createChild有3個參數
cName,用戶在導航面板中看到的書簽的名稱。
cExpr,單擊書簽時要執行的表達式,為JavaScript
nIndex,(可選)在書簽的子數組中,創建新子書簽的基於0的索引。默認值為0。
Sub Pdf添加書簽()
'為某書添加書簽
Dim App As New Acrobat.AcroApp
Dim PDoc As New Acrobat.AcroPDDoc, AVDoc As New Acrobat.AcroAVDoc
Dim Jso As Object
Dim BMark As Object '不能聲明為Acrobat.AcroPDBookmark,否則createchild方法不可用。
Dim PFile As String, WordTF As String, PageNum As Long
PFile = "F:指定文件.pdf" '要插入書簽的pdf文件
WordTF = "要查找的"
If PDoc.Open(PFile) Then
Set Jso = PDoc.GetJSObject
Set AVDoc = PDoc.OpenAVDoc("") '獲得一個可見文檔
Jso.bookmarkroot.Remove '移除原有的所有書簽
End If
If AVDoc.FindText(WordTF, 0, 0, 1) Then '從第一頁開始,如果找到了字元串WordTF一次
PageNum = AVDoc.GetAVPageView.GetPageNum '獲得當前頁碼
Set BMark = Jso.bookmarkroot '設置書簽根對象
BMark.createChild WordTF, "this.pageNum=" & PageNum, 0 '創建一個書簽
PDoc.Save 1, PFile
End If
PDoc.Close
App.CloseAllDocs
App.Hide
App.Exit
Set AVDoc = Nothing
Set PDoc = Nothing
Set App = Nothing
Set BMark = Nothing
Set Jso = Nothing
End Sub
❸ vba如何使用CAcroAVDoc列印pdf文件
方法/步驟
代碼如下
❹ VBA使用sendkeys列印已打開的PDF文件
Public Sub PPDone()
keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), 0, 0 '模擬Ctrl按下
keybd_event vbKeyV, MapVirtualKey(vbKeyP, 0), 0, 0 '模擬P按下
keybd_event vbKeyV, MapVirtualKey(vbKeyP, 0), KEYEVENTF_KEYUP, 0 '模擬P彈起
keybd_event vbKeyControl, MapVirtualKey(vbKeyControl, 0), KEYEVENTF_KEYUP, 0 '模擬Ctrl彈起
End Sub
把這個加到模塊里,要列印的時候的時候調用一下內PPDone
你可以試容著琢磨一下
希望我的回答對你有所幫助