2010-10-07 169 views
2

我想将Excel文件另存为.pdf文件到特定位置,然后通过邮件发送文件。将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”这样的路径。

+0

我真的很高兴,如果有人“那里”可以帮助我这一个。 – Anders 2010-10-11 22:21:17

回答

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的移动不允许覆盖),使用CopyFile和覆盖开启,然后根据需要删除源文件

如果您想使用文件对话框来选择目标,可以使用UserAccounts.CommonDialog对象(虽然该对象不适用于Vista)或SAFRCFileDlg.FileOpen(几乎只适用于XP)或借用IE提示框。 (不幸的是,选择是不是所有与VBS这个伟大据我所知)

检查出来这里:http://www.robvanderwoude.com/vbstech_ui_fileopen.php

+0

嗨NSN,感谢您的关注。我想更详细地描述我的问题,但是我觉得很难。该文件每次被命名为新的。不需要文件对话框。它必须尽可能自动 - 无需手动输入:) – Anders 2010-11-08 15:01:49

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项中使用了哪个应用程序。然后使用该可执行文件的完整应用程序路径的名称。

0

试试这个:

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

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