Сохраните файл Excel в формате PDF по указанному пути - PullRequest
2 голосов
/ 07 октября 2010

Я хотел бы сохранить файл 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 голосов
/ 11 января 2013

Это немного сложно, так как вы должны установить ключи реестра. Предполагая, что у вас есть полная версия 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» - это то, что мне нужно для моего 32-разрядного Excel 2010, и оно может отличаться для вас. Чтобы определить его (который не изменится), сначала напечатайте вручную в PDF, затем перейдите в раздел реестра и посмотрите, какое приложение используется в ключе HKCU \ Software \ Adobe \ Acrobat Distiller \ PrinterJobControl LastPDFPortFolder. Затем используйте имя полного пути приложения для этого исполняемого файла.

0 голосов
/ 11 мая 2015

Попробуйте это:

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

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sName
0 голосов
/ 25 октября 2010

Если у вас есть файл, сохраненный в фиксированном месте, но вы не можете выбрать, где, в крайнем случае, вы всегда можете использовать MoveFile fso, чтобы переместить его в указанное вами место

например.Если файл всегда сохраняется как «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

...