ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1193|回复: 16

[原创] EXCELvba 封装函数之PDF文件导出各种格式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-9 16:45 | 显示全部楼层 |阅读模式
本帖最后由 bluesky_0 于 2024-4-10 12:40 编辑

文档性质的PDF,可以导出很多格式,我导出使用的格式 是 图片,EXCEL,其他格式没有用过;
在Win10  Adobe9.0 pro, Adobe DC pro 运行OK
注意生成的EXCEL格式文件,需要Adobe PRO 10.0 以上版本

  1. Public Function SavePDFAsFormat(PDFPath_old As String, pdfName As String, PDFPath_new As String, FileExtension As String, Optional fileName As String = "") As String
  2.     'PDFPath_old As String, PDFname As String, 分别是PDF文件地址,文件名;分别举例:D:\OK,test.pdf
  3.     'PDFPath_new As String, FileExtension As String, Optional file_name As String = "" 分别是新地址,格式,可选项文件名,默认是原PDF文件名
  4.     '重名不覆盖,自动重命名-001
  5.     Dim objAcroApp      As Acrobat.acroApp
  6.     Dim objAcroAVDoc    As Acrobat.acroAVDoc
  7.     Dim objAcroPDDoc    As Acrobat.acroPDDoc
  8.     Dim objJSO          As Object
  9.     Dim boResult        As Boolean
  10.     Dim ExportFormat    As String
  11.     Dim NewFilePath     As String
  12.       
  13.     'Initialize Acrobat by creating App object.
  14.     Set objAcroApp = CreateObject("AcroExch.App")
  15.    
  16.     'Set AVDoc object.
  17.     Set objAcroAVDoc = CreateObject("AcroExch.AVDoc")
  18.    
  19.     'Open the PDF file.
  20. '    boResult = objAcroAVDoc.Open(PDFPath_old & "" & pdfName & ".pdf", "")
  21.     boResult = objAcroAVDoc.Open(PDFPath_old & "" & pdfName, "")
  22.       
  23.     'Set the PDDoc object.
  24.     Set objAcroPDDoc = objAcroAVDoc.GetPDDoc
  25.    
  26.     'Set the JS Object - JavaScript Object.
  27.     Set objJSO = objAcroPDDoc.GetJSObject
  28.    
  29.     'Check the type of conversion.
  30.     Select Case LCase(FileExtension)
  31.         Case "eps": ExportFormat = "com.adobe.acrobat.eps"
  32.         Case "html", "htm": ExportFormat = "com.adobe.acrobat.html"
  33.         Case "jpeg", "jpg", "jpe": ExportFormat = "com.adobe.acrobat.jpeg"
  34.         Case "jpf", "jpx", "jp2", "j2k", "j2c", "jpc": ExportFormat = "com.adobe.acrobat.jp2k"
  35.         Case "docx": ExportFormat = "com.adobe.acrobat.docx"
  36.         Case "doc": ExportFormat = "com.adobe.acrobat.doc"
  37.         Case "png": ExportFormat = "com.adobe.acrobat.png"
  38.         Case "ps": ExportFormat = "com.adobe.acrobat.ps"
  39.         Case "rft": ExportFormat = "com.adobe.acrobat.rft"
  40.         Case "xlsx": ExportFormat = "com.adobe.acrobat.xlsx"
  41.         Case "xls": ExportFormat = "com.adobe.acrobat.spreadsheet"
  42.         Case "txt": ExportFormat = "com.adobe.acrobat.accesstext"
  43.         Case "tiff", "tif": ExportFormat = "com.adobe.acrobat.tiff"
  44.         Case "xml": ExportFormat = "com.adobe.acrobat.xml-1-00"
  45.         Case Else: ExportFormat = "Wrong Input"
  46.     End Select
  47.    
  48.     'Check if the format is correct and there are no errors.
  49.     If ExportFormat <> "Wrong Input" And Err.Number = 0 Then
  50.       
  51.         'Format is correct and no errors.
  52.       
  53.         'Set the path of the new file.
  54.         If fileName = "" Then
  55.             fileName = pdfName
  56.         End If
  57.         
  58.         counter = 1
  59.         Do While Dir(PDFPath_new & "" & fileName & "-" & Format(counter, "000") & "." & FileExtension) <> ""
  60.             counter = counter + 1
  61.         Loop
  62.         
  63.         If LCase(FileExtension) <> "xls" Then
  64.             NewFilePath = PDFPath_new & "" & fileName & "-" & Format(counter, "000") & "." & FileExtension
  65.         Else
  66.             NewFilePath = PDFPath_new & "" & fileName & "-" & Format(counter, "000") & ".xml"
  67.         End If
  68.       
  69.         'Save PDF file to the new format.
  70.         boResult = objJSO.SaveAs(NewFilePath, ExportFormat)
  71.       
  72.         'Close the PDF file without saving the changes.
  73.         boResult = objAcroAVDoc.Close(True)
  74.       
  75.         'Close the Acrobat application.
  76.         boResult = objAcroApp.Exit
  77.       
  78.     Else
  79.       
  80.         'Something went wrong, so close the PDF file and the application.
  81.       
  82.         'Close the PDF file without saving the changes.
  83.         boResult = objAcroAVDoc.Close(True)
  84.       
  85.         'Close the Acrobat application.
  86.         boResult = objAcroApp.Exit

  87.     End If
  88.     SavePDFAsFormat = NewFilePath
  89.     'Release the objects.
  90.     Set objAcroPDDoc = Nothing
  91.     Set objAcroAVDoc = Nothing
  92.     Set objAcroApp = Nothing
  93. End Function
复制代码



补充内容 (2024-7-11 08:30):
更正code里一个错误:
boResult = objAcroAVDoc.Open(PDFPath_old & "" & pdfName, "")改成
boResult = objAcroAVDoc.Open(PDFPath_old & "\" & pdfName, "")

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-9 22:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 shiruiqiang 于 2024-4-10 06:05 编辑

感谢分享,学习一下

TA的精华主题

TA的得分主题

发表于 2024-4-10 07:56 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
支持分享,学习了

TA的精华主题

TA的得分主题

发表于 2024-4-10 20:35 | 显示全部楼层
Adobe Acrobat 报错 无法写入指定的文件。该文件可能正在使用。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-10 21:59 | 显示全部楼层
本帖最后由 bluesky_0 于 2024-4-10 22:01 编辑
QQ214189912 发表于 2024-4-10 20:35
Adobe Acrobat 报错 无法写入指定的文件。该文件可能正在使用。

EXCELvba 文件发来看看,我没有遇到你说的 问题
我是这样子调用的

ActiveSheet.Range("AJ" & i) = SavePDFAsFormat(sourceFolderPath, fileName, destinationFolderPath, "xlsx", newFileName)

TA的精华主题

TA的得分主题

发表于 2024-4-10 23:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-11 08:20 | 显示全部楼层
我的office  2016 32位,大佬,我用access VBA  在窗体上把报表转PDF,里面的图片logo 转换成功后,丢失啦!


直接打开报表 图片控件会显示图片mylogo.png,而在窗体放置一个打印按钮:打开rpt_JY_MF报表, JY_no='" & Me![JY_NO] & "'"却不显示图片?
下面是打印按钮的VBA代码
Private Sub btnPrint_Click()
    DoCmd.OpenReport "rptJY_MF", acViewPreview, , "JY_no='" & Me![JY_NO] & "'"
End Sub

管理系统.zip (217.86 KB, 下载次数: 21)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-12 11:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
rendiule01 发表于 2024-4-11 08:20
我的office  2016 32位,大佬,我用access VBA  在窗体上把报表转PDF,里面的图片logo 转换成功后,丢失啦 ...

你这个,我看看能不能搞定

TA的精华主题

TA的得分主题

发表于 2024-6-10 22:21 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ExportFormat = "com.adobe.acrobat.xml-1-00
这个是1.0,如果想转成XML电子表格2003咋搞?

TA的精华主题

TA的得分主题

发表于 2024-6-28 09:04 | 显示全部楼层
本帖最后由 踏破拖鞋 于 2024-6-28 09:06 编辑

Set objJSO = objAcroPDDoc.GetJSObject  不知道哪出的问题,在这句的时候 打不开文件,附调用情况
1.png
2.png
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 14:26 , Processed in 0.048103 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表