Я пытаюсь экспортировать лист 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 прекращается, но ничего не печатается, как мой файл открыто и закрыто в кратчайшие сроки.
Так любая помощь с этим пожалуйста ??
Единственное, что у меня есть, это не открывать его в Adobe Reader в первую очередь. Если вы заметите, вы можете распечатать PDF из контекстного меню без фактического открытия Reader - я рекомендую посмотреть, как это работает ... – Krease
Это также происходит, даже если я сначала открою файл, используя shellexecute. Не могли бы вы объяснить, пожалуйста, что вы имеете в виду, напечатав PDF из контекстного меню без фактического открытия читателя? – user3286479
В Windows с установленным Reader, щелкнув правой кнопкой мыши по PDF-файлу в проводнике, вы увидите «Печать» среди параметров. Выбор этого параметра приведет к печати PDF-файла без открытия Reader. Вы должны иметь возможность подключиться к аналогичному механизму, чтобы во избежание открытия Reader в первую очередь. Пожалуйста, имейте в виду, что это всего лишь идея и может или не может работать в вашей ситуации. – Krease