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
没有时间打开和关闭。
那么,请帮助吗?
我唯一的建议是首先不要在Adobe Reader中打开它。如果你会注意到,你可以从上下文菜单中打印一个PDF文件,而不需要真正打开读取器 - 我建议查看它是如何工作的... – Krease
即使我首先使用shellexecute打开文件,也会发生这种情况。你能解释一下吗?你打算从上下文菜单中打印PDF而不打开阅读器是什么意思? – user3286479
在安装了Reader的Windows中,右键单击资源管理器中的PDF将在选项中显示“打印”。选择此选项将打印PDF而无需打开Reader。您应该能够钩入类似的机制,以避免首先打开Reader。请记住,这只是一个想法,可能或可能不适用于您的情况。 – Krease