精华内容
下载资源
问答
  • 学习Excel技术,关注微信公众号:excelperfectQ:我想要在VBA中使用代码来打印指定的PDF文件,如何实现?A:在《VBA小技巧04:使用VBA获取能够打开指定文件的EXE程序》中,我们介绍了一个自定义函数ExePath,可以...

    学习Excel技术,关注微信公众号:

    excelperfect

    Q我想要在VBA中使用代码来打印指定的PDF文件,如何实现?

    A在《VBA小技巧04使用VBA获取能够打开指定文件的EXE程序》中,我们介绍了一个自定义函数ExePath,可以获取能够打开指定文件的EXE程序的路径。这样,我们就可以使用EXE程序来打开该文件了。因此,下面的代码先使用ExePath函数获取PDF文件的可执行程序路径,然后使用它来打开指定的PDF文件。

    代码如下:

    DeclareFunction FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _(ByVal lpFileAs String, ByVal lpDirectory As String, ByVal lpResult As String) As Long Sub Test_PrintPDF()  Dim strFileName As String  strFileName = "D:\test.pdf"  PrintPDf strFileNameEnd Sub Sub PrintPDf(fnAs String)  Dim pdfEXE As String  Dim q As String   pdfEXE = ExePath(fn)  If pdfEXE = "" Then    MsgBox "没有找到pdf相关的EXE程序.",vbCritical, "Macro Ending"    Exit Sub  End If   q = """"   Shell q & pdfEXE & q & " /s/o /h /t " & q & fn & q, vbHideEnd Sub Function ExePath(lpFile As String) As String   Dim lpDirectory As String   Dim strExePath As String   Dim lrc As Long   lpDirectory = "\"   strExePath = Space(255)   lrc = FindExecutable(lpFile, lpDirectory,strExePath)   strExePath = Left$(strExePath,InStr(strExePath, Chr$(0)) - 1)   ExePath = strExePathEnd Function

    代码中:

    1.使用变量strFileName指定了所要打印的PDF文件的完整路径名。

    2.对于AcroRd32.exe,传递给Shell命令的参数如下:

    /n-启动一个新的Reader实例,即使该实例已经打开

    /s-不显示启动界面

    /o-不显示打开文件对话框

    /h-以最小化窗口打开

    /p <文件名>-打开并直接进入打印对话框

    /t <文件名> <打印机名> <驱动程序名> <端口名>-将文件打印到指定的打印机

    3.确保使用双引号将EXE完整的路径和PDF文件完整路径名括起来。

    还有一段更简单一些的代码可以实现:

    Declare FunctionapiShellExecute 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 ("D:\test.pdf")End Sub

    注:本文学习整理自www.ozgrid.com/forum,在该论坛中,有很多实用的问题解答,可以在帮助我们答疑解惑的同时提高VBA编程能力。

    dfedea4005023e79053e12b48ab9fa74.png

    展开全文
  • 如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也...

    关注微信公众号:VBA168,回复“批量导入pdf文件”,获取文件下载链接。


    如图1所示,"BOM-01.xlsx"工作簿中的Sheet1工作表根据B列图号单元格中的内容,在图2所示的文件夹中找到对应的PDF文件,然后嵌入到相应的N列,双击N列中所示的图标,会打开PDF文件,是源文件的副本,即删除源文件,也可以打开N列的文件。
     

    图1 根据B列的图号在N列嵌入对应的PDF文件

    图2 PDF文件

    图3 文件格式
     

    Sub 导入文件()
         Application.ScreenUpdating = False'禁止屏幕更新
         Application.DisplayAlerts = False'禁止弹出对话框
         
         Dim fil As String, fn As String
         Dim wb As Workbook
         Dim sht As Worksheet
         Dim RWidth As Long, RHeight As Long
         Dim Obj As Object
         
         RWidth = 40
         RHeight = 60
         Set wb = Workbooks.Open(ThisWorkbook.Path & "\BOM-01.xlsx")
         Set sht = wb.Worksheets(1)
         sht.Columns("N:N").ColumnWidth = RWidth
         Dim Str1 As String
         Dim FileName As String
         FileName = Dir(ThisWorkbook.Path & "\PDF文件\*.pdf")
         Dim i As Long, IRow As Long
         IRow = sht.Range("B10000").End(xlUp).Row
         
         Do While FileName <> ""
             For i = 4 To IRow
                 Str1 = Trim(sht.Cells(i, 2).Value)
                 If InStr(FileName, Str1) And Str1 <> "" Then
                     sht.Cells(i, "N").RowHeight = RHeight
                     sht.Cells(i, "N").Select
                     fn = ThisWorkbook.Path & "\PDF文件\" & FileName
                     sht.OLEObjects.Add FileName:=fn, _
                         link:=False, _
                         DisplayAsIcon:=True, _
                         IconFileName:="C:\windows\Installer\{AC76BA86-1033-FFFF-7760-0E0F06755100}\_PDFFile.ico", _
                         iconindex:=0, _
                         iconlabel:=fn
                     Exit For
                 End If
             Next
             
             FileName = Dir '用dir函数取得其他文件名,并赋给变量
         Loop
         wb.Save
         Application.ScreenUpdating = True
         Application.DisplayAlerts = True
     End Sub

    OLEObjects.Add方法向工作表中添加新的 OLE 对象。其语法格式如下。

    表达式.Add(ClassType, FileName, Link, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Left, Top, Width, Height)

    各参数说明如下表所示。

    名称 必选/可选 数据类型 说明
    ClassType 可选 Variant (必须指定 ClassType 或  FileName)。一个字符串,包含要创建的对象的程序标识符。如果指定了 ClassType 参数,则忽略  FileName 和 Link
    FileName 可选 Variant (必须指定 ClassType 或 FileName)。一个字符串,指定用于创建 OLE  对象的文件。
    Link 可选 Variant 如果为 True,则让基于 FileName 的新 OLE  对象链接到该文件。如果该对象未链接到文件,则该对象被创建为文件副本。默认值是 False
    DisplayAsIcon 可选 Variant 如果为 True,则以图标或正常图片方式显示新的 OLE 对象。如果该参数设置为  True,则可以使用 IconFileName 和 IconIndex 来指定图标。
    IconFileName 可选 Variant 一个字符串,指定要显示的图标所在的文件。仅当 DisplayAsIcon 为 True  时,才使用该参数。如果不指定该参数,或文件中不包含图标,则使用 OLE 类的默认图标。
    IconIndex 可选 Variant 图标文件中包含的图标数目。仅当 DisplayAsIcon 参数为 True 并且  IconFileName 参数引用包含图标的有效文件时,才使用该参数。如果由 IconFileName  参数指定的文件中不存在具有指定索引号的图标,则使用该文件中的第一个图标。
    IconLabel 可选 Variant 一个字符串,指定在图标下方显示一个标签。仅当 DisplayAsIcon 为 True  时,才使用该参数。如果省略该参数,或者该参数为空字符串 (""),则不显示任何标题。
    Left 可选 Variant 以磅为单位给出新对象的初始坐标,该坐标是相对于工作表上单元格 A1  的左上角或图表的左上角的坐标。
    Width 可选 Variant 以磅为单位给出新对象的初始大小。

     

     


    微信公众号:VBA168

    淘宝店铺地址:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-21233576391.4.1af0683dzrx3oU&id=584940166162

    关注微信公众号,每天及时接收Excel VBA经典示例讲解。

    淘宝店铺提供Excel定制服务。

    祝你工作和学习更轻松!

    展开全文
  • EXCEL-VBA打开word文件转换为PDF保存

    千次阅读 2020-02-27 21:34:37
    Sub a() Dim WordApp As Word.... WordDoc.SaveAs ThisWorkbook.Path & "\HAHA1.pdf", wdFormatPDF WordDoc.Close WordApp.Quit Set WordDoc = Nothing Set WordApp = Nothing End Sub 要引用word哦
    Sub a()
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        
        Set WordApp = New Word.Application
        Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\HAHA1.docx")
        WordDoc.SaveAs ThisWorkbook.Path & "\HAHA1.pdf", wdFormatPDF
        WordDoc.Close
        WordApp.Quit
        Set WordDoc = Nothing
        Set WordApp = Nothing
    End Sub
    

    要引用word哦

    展开全文
  • 通过网络搜索得到关于“通过查阅读pdf文件格式的标准或者官方的文件格式文档,可以得知,如果用二进制形式打开pdf文件的话,”/Count”后面出现的数字即为总页数。利用这个规则,可以使用如下的vba自定义函数获取pdf...

    问题点:

    在日常工作是,有需要批量打印.pdf的需求,但是客户提供的是pdf档,在pdf档的最后一页是关于客户公司的信息,如果批量打印的话,会有大量重复无用的页面,只能通过手动设置打印页数,这无疑给工作造成上大量的工作。

     

    解决方法:

    step1:

    通过网络搜索得到关于“通过查阅读pdf文件格式的标准或者官方的文件格式文档,可以得知,如果用二进制形式打开pdf文件的话,”/Count”后面出现的数字即为总页数。利用这个规则,可以使用如下的vba自定义函数获取pdf文件的总页数”通过他的代码,可以实现。

    不过我对VBA也不是特别懂。

    代码如下:

    Function GetPageNum(sPath As String)
        Dim iFN As Integer
        iFN = VBA.FreeFile
        Dim bFileSize As Long
        bFileSize = VBA.FileLen(sPath)
        Open sPath For Binary Access Read As iFN
        Dim arrResult() As Byte
        '读取字节流
        arrResult = InputB(bFileSize, iFN)
        Dim arrFind() As Byte
        '要查找的字节串,"/Count"为pdf总页数的特征字符标识
        arrFind = VBA.StrConv("/Count", vbFromUnicode)
        '设置查找的起始位置
        bPos = 0
        bPos = VBA.InStrB(bPos + 1, arrResult, arrFind, vbBinaryCompare)
        '设置个变量预装"/Count"之后的字符
        Dim sResult As String
        sResult = Space(1000)
        Get iFN, bPos + 6, sResult
        GetPageNum = VBA.Val(sResult)
        Close iFN
    End Function
    

    step2:创建一个过程,然后调用这个自定义函数

    Sub xxs()
    
    GetPageNum ("F:\李敏\内部课程-完结篇\CTF课程\拓展学习资料\CTF学习资料\003-CTF web题型解流量分析-第三课 工具使用-流量分析.pdf")
    Debug.Print GetPageNum("F:\李敏\内部课程-完结篇\CTF课程\拓展学习资料\CTF学习资料\003-CTF web题型解流量分析-第三课 工具使用-流量分析.pdf")
    
    End Sub
    

    step3:实现后的界面

    step4:这个代码既然是通过二进制打开然后搜索”/Count”,那必然很卡,100M左右文件获取大约需要10分钟。

     

    用记事本打开也是长时间的卡死,但最终能打开。

     

    step5:通过记事本的方式也可以获取页数

     

     

     

     

     

    展开全文
  • ppt是画科研插图的优秀工具,能够很方便的导出为pdf并插入latex,但手动通过“另存为-格式-pdf-当前页-确定”将一页ppt保存为一个pdf文件要选择多个选项,稍显繁琐,故编写了一小段vba脚本来自动化这一步骤。...
  • 将该文件与需要转换的Excel文件放在同一个文件夹中,打开文件,点击开始转换,稍等片刻即可完成转换
  • Pdf文件转换为Word

    2015-05-14 20:47:43
    在Word 2013里面,我们可以打开一个PDF文件,并对其进行编辑,重新保存后,实现将PDF文件转换为Word文件 下面由简单的代码VBA代码实现将某个目录下所有的PDF文件转为Word文件 Sub PdftoWord() Dim file As ...
  • Excel_VBA程序设计.pdf

    热门讨论 2009-08-31 23:05:20
    非常详尽的Excel_VBA程序设计,好不容易才整理搜索到的。 一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 第...
  • 使用ObjectDBX实现的批量文字替换,与上一个版本比较起来,修正了一些Bug,并且是在不打开文件的情况下完成操作的,速度有了明显的提高。 第6章介绍了标注和公差的使用。新的圆弧长度标注程序涉及到多行文字格式代码...
  • VBA实践+为PDF文档插入书签声明:文章仅供参考,尝试请注意备份文件作用:打开pdf文档,查找到指定字符串,然后插入书签以下代码先设置一个待查找字符串,用findtext方法查找,然后用createchild方法插入书签。...
  • vba编写的excel批量转换为 ,xls格式、xlsx格式 、csv格式、或pdf格式。 使用界面如下: 解压缩,用office的Excel打开vba批量另存为工具.xlsm》文件,启用宏 选择转换文件,ctrl A 本目录下文件全选,...
  • 有时候需要把大量的xlsx文件另存为其它格式,比如pdf、xls、csv,或者反向转换,可以用VBA批量处理。启动Excel,按下Alt+F11,打开Microsoft Visual Basic for Applications,点击 插入>模块,将下面的代码粘贴...
  • 有时候需要把大量的docx文件另存为其它格式,比如pdf、doc、rtf、txt,或者反向转换,可以用VBA批量处理。启动word,按下Alt+F11,打开Microsoft Visual Basic for Applications,点击 插入>模块,将下面的代码...
  • 一、Windows安装1.首先点击以下链接,【点击下载】 ,下载黑马校对Word、PDF修复工具。...id=172.解压后会出现如下图标,双击,会出现修复报告对话框,点击... 3.打开Windows Word文件,【加载项】→黑马,进行校对。...
  • vba实践+提取word章节标题文本及其起止页码信息声明:需要先打开文档再执行代码。在执行操作前,请先备份文件。有一个扫描版的pdf文档,进行文字识别后,得到一个与其对应的word文档(每页内容都与pdf文档一一对应)...
  • vba实践+提取word章节标题文本及其起止页码信息声明:需要先打开文档再执行代码。在执行操作前,请先备份文件。有一个扫描版的pdf文档,进行文字识别后,得到一个与其对应的word文档(每页内容都与pdf文档一一对应)...
  • 批量excel导成PDF.xlsm

    2020-09-13 19:59:59
    使用方法1。...选择“查看代码”,就可以打开VBA编辑界面。 选择模块1,点击上面的运行,选中你要批量导出的excel就OK了。 使用方法2。 打开后点击上面,启用宏,关闭本文件,在打开就会自动运行了,
  • ArcMap使用手册.pdf

    热门讨论 2012-02-19 15:02:46
    ARCMAP使用手册,目录如下 第一章 欢迎使用 ArcMap 3 可视化信息 4 用地理方式工作 5 显示关系 6 解决问题 7 创建和更新数据 8 展示结果 9 开发制图应用 10 学习ArcMap的技巧 11 ...修改 VBA 安全性 544
  • Qt之导出PDF、HTML和Word(三)

    千次阅读 2015-11-25 09:43:20
    它生成的文件,双击打开,会跳出一个选择框: 在word中,它支持编辑。如果想让它默认直接用word打开,可以使用word的另存为功能,另存为一个正在的word文档。但是,这个word文档的图片,仍然是以链接方式...
  • 1-3-3 打开数据库文件 1-3-4 保存数据库文件 1-3-5 备份数据库 1-4 关于数据库的二三事 1-4-1 不可不知1:更改Access的默认文件格式 1-4-2 不可不知2:转换旧版本的数据库 自我突破练习 第2章 建立数据库基本功...
  • Access 2000数据库系统设计(PDF)---002目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---031目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---016目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---011目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---025目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---026目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---022目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---012目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---017目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
  • Access 2000数据库系统设计(PDF)---028目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....

空空如也

空空如也

1 2 3 4 5
收藏数 84
精华内容 33
关键字:

vba打开pdf文件