2014-02-12 110 views
0

我试图将PDF文件Sheet1导出并打印出来,然后使用代码关闭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方法直到打印顺序正在终止的Adobe Reader之前发送到打印机暂停代码10秒。 但是,当我加入这行,在TerminateProcess子受到影响,我得到关于这一行(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终止,但打印没有为我的文件是一个Not found error没有时间打开和关闭。

那么,请帮助吗?

+0

我唯一的建议是首先不要在Adobe Reader中打开它。如果你会注意到,你可以从上下文菜单中打印一个PDF文件,而不需要真正打开读取器 - 我建议查看它是如何工作的... – Krease

+0

即使我首先使用shellexecute打开文件,也会发生这种情况。你能解释一下吗?你打算从上下文菜单中打印PDF而不打开阅读器是什么意思? – user3286479

+0

在安装了Reader的Windows中,右键单击资源管理器中的PDF将在选项中显示“打印”。选择此选项将打印PDF而无需打开Reader。您应该能够钩入类似的机制,以避免首先打开Reader。请记住,这只是一个想法,可能或可能不适用于您的情况。 – Krease

回答

0

也许这有点简单,但为什么不能只打印Excel文件而不打印PDF?他们应该是一样的不应该他们?

相关问题