2014-02-12 4 views
0

Я пытаюсь экспортировать лист Sheet1 в виде файла PDF и распечатать его, а затем закрыть Adobe Reader с помощью кода.Печать файла PDF и завершение работы Adobe Reader

Это код, я использую:

Private Declare Function ShellExecute 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 Function PrintThisDoc(Formname As Long, FileName As String) 
    On Error Resume Next 
    Dim X As Long 
    X = ShellExecute(Formname, "Print", FileName, 0&, 0&, 1) 
End Function 

Private Sub CommandButton1_Click() 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:="D:\Print.pdf" 
    PrintThis = PrintThisDoc(0, "D:\Print.pdf") 
    Application.Wait (Now + TimeSerial(0, 0, 10)) 
    TerminateProcess 
End Sub 

Я использую метод .wait для приостановки коды в течение 10 секунд, пока задание печати не посылаются на принтер перед завершением читателя самана. Но когда я добавить эту строку, то TerminateProcess к югу влияет и я получаю Not found error относительно этой линии (intError = objProcess.Terminate)

Sub TerminateProcess() 
    Dim strTerminateThis As String 
    Dim objWMIcimv2 As Object 
    Dim objProcess As Object 
    Dim objList As Object 
    Dim intError As Integer 

    'Process to terminate 
    strTerminateThis = "AcroRd32.exe" 

    'Connect to CIMV2 Namespace 
    Set objWMIcimv2 = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2") 

    'Find the process to terminate 
    Set objList = objWMIcimv2.ExecQuery("select * from win32_process where name='" & strTerminateThis & "'") 

    'Terminates a process and all of its threads. 
    For Each objProcess In objList 
     intError = objProcess.Terminate 
    Next 

    Set objWMIcimv2 = Nothing 
    Set objList = Nothing 
    Set objProcess = Nothing 
End Sub 

, когда я удалить .wait линию, Adobe Reader прекращается, но ничего не печатается, как мой файл открыто и закрыто в кратчайшие сроки.

Так любая помощь с этим пожалуйста ??

+0

Единственное, что у меня есть, это не открывать его в Adobe Reader в первую очередь. Если вы заметите, вы можете распечатать PDF из контекстного меню без фактического открытия Reader - я рекомендую посмотреть, как это работает ... – Krease

+0

Это также происходит, даже если я сначала открою файл, используя shellexecute. Не могли бы вы объяснить, пожалуйста, что вы имеете в виду, напечатав PDF из контекстного меню без фактического открытия читателя? – user3286479

+0

В Windows с установленным Reader, щелкнув правой кнопкой мыши по PDF-файлу в проводнике, вы увидите «Печать» среди параметров. Выбор этого параметра приведет к печати PDF-файла без открытия Reader. Вы должны иметь возможность подключиться к аналогичному механизму, чтобы во избежание открытия Reader в первую очередь. Пожалуйста, имейте в виду, что это всего лишь идея и может или не может работать в вашей ситуации. – Krease

ответ

0

Возможно, это немного упрощенно, но почему вы не можете просто распечатать файл Excel, а не PDF? Они должны быть такими же, не так ли?

Смежные вопросы