Excel 从FDF文件保存并打印PDF

Excel 从FDF文件保存并打印PDF,excel,vba,pdf,fdf,Excel,Vba,Pdf,Fdf,我有下面的宏,它将数据从excel填充到PDF。我想增强代码以保存PDF并打印它。文件名位于单元格A5中。当前代码将FDF保存到我的目录中。下面是使用的代码,取自以下链接: 选项显式 私有声明函数ShellExecute Lib“shell32.dll”别名“ShellExecuteA”(ByVal hwnd为长,ByVal lpOperation为字符串,ByVal lpFile为字符串,ByVal lpParameters为字符串,ByVal lpDirectory为字符串,ByVal nS

我有下面的宏,它将数据从excel填充到PDF。我想增强代码以保存PDF并打印它。文件名位于单元格A5中。当前代码将FDF保存到我的目录中。下面是使用的代码,取自以下链接:

选项显式
私有声明函数ShellExecute Lib“shell32.dll”别名“ShellExecuteA”(ByVal hwnd为长,ByVal lpOperation为字符串,ByVal lpFile为字符串,ByVal lpParameters为字符串,ByVal lpDirectory为字符串,ByVal nShowCmd为长)为长
专用常量SW_NORMAL=1
Public Const PDF_FILE=“f8655.PDF”
公共子市场FDF()
将sFileHeader设置为字符串
将sFileFooter设置为字符串
将sFileFields设置为字符串
将sFileName设置为字符串
Dim sTmp作为字符串
暗淡的lngFileNum与长
Dim vClient作为变体
'为FDF文件的内容生成字符串,然后将文件写入工作簿文件夹。
关于错误转到错误处理程序
sFileHeader=“%FDF-1.2”&vbCrLf&_
“%aãÓ”&vbCrLf&_
“10 obj”&vbCrLf&_
“endobj”&vbCrLf&_
“2 0 obj[”和vbCrLf
sFileFooter=“]”和vbCrLf&_
“endobj”&vbCrLf&_
“拖车”&vbCrLf&_
“”&vbCrLf&_
“%%EO”
sFileFields=“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf
vClient=范围(Selection.Row&“:”&Selection.Row)
sFileFields=Replace(sFileFields,“--NAME--”,vClient(1,2))
如果Len(vClient(1,3))>3,则
sTmp=Replace(vClient(1,3),“-”,“)
sFileFields=Replace(sFileFields,“--EIN_LEFT--”,LEFT$(sTmp,2))
sFileFields=Replace(sFileFields,“--EIN\u RIGHT--”,Mid$(sTmp,3))
其他的
sFileFields=Replace(sFileFields,“--EIN\u LEFT--”,vbNullString)
sFileFields=Replace(sFileFields,“--EIN\u RIGHT--”,vbNullString)
如果结束
sFileFields=Replace(sFileFields,“--OIN--”,vClient(1,4))
sFileFields=Replace(sFileFields,“--TRADE_NAME--”,vClient(1,5))
sFileFields=Replace(sFileFields,“----季节--”,vClient(1,6))
sFileFields=Replace(sFileFields,“----街道\地址---”,vClient(1,7))
sFileFields=Replace(sFileFields,“--CITY\u STATE\u ZIP--”,vClient(1,8))
sFileFields=Replace(sFileFields,“--CONTACT--”,vClient(1,9))
如果Len(vClient(1,10))=10,则
sTmp=Replace(vClient(1,10),“-”,“)
sFileFields=Replace(sFileFields,“--PHONE_LEFT--”,LEFT$(sTmp,3))
sFileFields=Replace(sFileFields,“--PHONE_RIGHT--”,Mid$(sTmp,4,3)和“-”和Mid$(sTmp,7))
其他的
sFileFields=Replace(sFileFields,“--PHONE\u LEFT--”,vbNullString)
sFileFields=Replace(sFileFields,“--PHONE\u RIGHT--”,vbNullString)
如果结束
如果Len(vClient(1,11))=10,那么
sTmp=Replace(vClient(1,11),“-”,“)
sFileFields=Replace(sFileFields,“--FAX_LEFT--”,LEFT$(sTmp,3))
sFileFields=Replace(sFileFields,“--FAX_RIGHT--”,Mid$(sTmp,4,3)和“-”和Mid$(sTmp,7))
其他的
sFileFields=Replace(sFileFields,“--FAX\u LEFT--”,vbNullString)
sFileFields=Replace(sFileFields,“--FAX\u RIGHT--”,vbNullString)
如果结束
sTmp=sFileHeader&sFileFields&sFileFooter
'将FDF文件写入磁盘
如果是Len(vClient(1,1)),则sFileName=vClient(1,1)Else sFileName=“FDF_DEMO”
sFileName=active工作簿.Path&“\”&sFileName&“.fdf”
lngFileNum=FreeFile
打开sFileName以作为lngFileNum输出
打印#lngFileNum,sTmp
关闭#lngFileNum
多芬特
'以PDF格式打开FDF文件
ShellExecute vbNull,“打开”,sFileName,vbNull,vbNull,SW_NORMAL
出口接头
错误处理程序:
MsgBox“MakeFDF Error:”+Str(Err.Number)+“+Err.Description+”+Err.Source
端接头
任何帮助都将不胜感激

Option Explicit 

Declare Function apiShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ 
ByVal hwnd As Long, _ 
ByVal lpOperation As String, _ 
ByVal lpFile As String, _ 
ByVal lpParameters As String, _ 
ByVal lpDirectory As String, _ 
ByVal nShowCmd As Long) _ 
As Long 

Public Sub PrintFile(ByVal strPathAndFilename As String) 
    Call apiShellExecute(Application.hwnd, "print", strPathAndFilename, vbNullString, vbNullString, 0)  
End Sub 

Sub Test() 
    PrintFile ("C:\Test.pdf") 
End Sub 
按原样添加此代码,只需在所需位置下调用PrintFile,并在您的案例中传递文件路径sFileName,这样最终调用将是:
打印文件sFileName

您好,Mick请根据您的选择添加它。我的意思是在一个按钮或任何其他界面上,你想从中完成这项工作。
Option Explicit 

Declare Function apiShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _ 
ByVal hwnd As Long, _ 
ByVal lpOperation As String, _ 
ByVal lpFile As String, _ 
ByVal lpParameters As String, _ 
ByVal lpDirectory As String, _ 
ByVal nShowCmd As Long) _ 
As Long 

Public Sub PrintFile(ByVal strPathAndFilename As String) 
    Call apiShellExecute(Application.hwnd, "print", strPathAndFilename, vbNullString, vbNullString, 0)  
End Sub 

Sub Test() 
    PrintFile ("C:\Test.pdf") 
End Sub