【问题标题】:Save an Excel file as PDF to a specific path将 Excel 文件另存为 PDF 到特定路径
【发布时间】:2011-04-22 10:02:30
【问题描述】:

我想将 Excel 文件作为 .pdf 文件保存到特定位置,然后通过邮件发送该文件。

我正在使用 Office 2000 :|

这是我目前的代码:

Application.ActivePrinter = "PDF995 on Ne00:"
ActiveSheet.PageSetup.PrintArea = Range("A68").Value
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
    "PDF995 on Ne00:", Collate:=True
        Set WB = ActiveWorkbook
        Set oApp = CreateObject("Outlook.Application")
        Set omail = oApp.Createitem(0)
        With omail
            .To = Range("B61").Value
            .Subject = "Approved"
            .Body
            .Display
            Rows("81:134").Select
            Selection.EntireRow.Hidden = True
        End With

我可以轻松地保存文件并将其邮寄,但我无法将其保存到特定位置。

我需要能够指定像“C:\path\file.pdf”这样的路径。

【问题讨论】:

  • 如果有人“在外面”能帮我解决这个问题,我真的很高兴。

标签: excel vba pdf printing acrobat


【解决方案1】:

如果您将文件保存到固定位置,但您无法选择保存位置,作为最后的手段,您始终可以使用 fso 的 MoveFile 将其移动到指定位置

例如。如果文件始终保存为“C:\temp\file1.pdf”,并且您希望它在桌面上

'Initialise first'
set fso = CreateObject("Scripting.FileSystemObject")
...
'After procedure'
desired_destination = "c:\windows\desktop\"
target_file = "C:\temp\file1.pdf"

fso.MoveFile target_file, desired_destination

如果您想检查现有文件冲突(我相信 fso 的 Move 不允许覆盖),请使用 CopyFile 并打开覆盖,然后在必要时删除源文件

如果您想使用文件对话框来选择目标,您可以使用 UserAccounts.CommonDialog 对象(尽管这不适用于 Vista)或 SAFRCFileDlg.FileOpen(几乎只适用于 XP)或借用一个 IE 提示框。 (不幸的是,据我所知,VBS 的选项并不是那么好)

在这里查看它们:http://www.robvanderwoude.com/vbstech_ui_fileopen.php

【讨论】:

  • 您好 NSN,感谢您的关注。我想多描述一下我的问题,但我觉得很难。该文件每次都被命名为新的。不需要文件对话框。它必须尽可能自动化 - 无需手动输入 :)
【解决方案2】:

这有点复杂,因为您必须设置注册表项。 假设您拥有已安装初始注册表项的完整版 Adob​​e Acrobat:

首先,你有注册表访问函数,你把它放在一个非工作表模块中:

Private Const HKEY_CURRENT_USER As Long = &H80000001
Private Const HKCU = HKEY_CURRENT_USER
Private Const KEY_SET_VALUE = &H2&
Private Const REG_SZ = 1

Private Declare Function RegOpenKeyEx Lib "advapi32" _
    Alias "RegOpenKeyExA" ( _
    ByVal hKey As Long, _
    ByVal lpSubKey As String, _
    ByVal ulOptions As Long, _
    ByVal samDesired As Long, _
    phkResult As Long) As Long

Private Declare Function RegSetValueExA Lib "ADVAPI32.DLL" _
    (ByVal hKey As Long, _
     ByVal sValueName As String, _
     ByVal dwReserved As Long, _
     ByVal dwType As Long, _
     ByVal sValue As String, _
     ByVal dwSize As Long) As Long

Private Declare Function RegCloseKey Lib "ADVAPI32.DLL" ( _
    ByVal hKey As Long) As Long

然后,您使用以下代码设置告诉 Adob​​e 将文件保存在何处的注册表项。注意,每次打印都必须设置。

Dim RegResult As Long, Result As Long

RegResult = RegOpenKeyEx(HKCU, "Software\Adobe\Acrobat Distiller\PrinterJobControl", _
                         0&, KEY_SET_VALUE, Result)
RegResult = RegSetValueExA(Result, "C:\Windows\splwow64.exe", 0&, REG_SZ, _
                          FileName, Len(FileName))
RegResult = RegCloseKey(Result)

另外请注意,“C:\Windows\splwow64.exe”是我的 Excel 2010 32 位所需要的,它可能对您有所不同。要确定它(不会更改),首先手动打印到 PDF,然后转到注册表项并查看 HKCU\Software\Adobe\Acrobat Distiller\PrinterJobControl LastPDFPortFolder 项中使用的应用程序。然后使用该可执行文件的完整应用程序路径的名称。

【讨论】:

    【解决方案3】:

    试试这个:

    sName = "C:\path\file.pdf"
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sName
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多