将Excel文件另存为PDF到特定路径

时间:2010-10-07 14:37:48

标签: excel vba pdf printing acrobat

我想将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”这样的路径。

3 个答案:

答案 0 :(得分:0)

如果您将文件保存到固定位置但是您无法选择在哪里,作为最后的手段,您可以随时使用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

答案 1 :(得分:0)

这有点复杂,因为您必须设置注册表项。 假设您有安装了初始注册表项的完整版Adobe 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

然后,使用以下代码设置注册表项,告知Adobe保存文件的位置。请注意,每次打印时都必须设置它。

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 \ Adob​​e \ Acrobat Distiller \ PrinterJobControl LastPDFPortFolder键中使用的应用程序。然后使用该可执行文件的完整应用程序路径的名称。

答案 2 :(得分:0)

试试这个:

sName = "C:\path\file.pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sName