Я использую следующий код в MS Access 2010 для печати HTML-файла (локального).Подождите, пока ExecWB закончит
Он будет работать только в том случае, если я удалю комментарий по строке msgbox («wait»). Откроется диалоговое окно печати, и я смогу распечатать документ. Если я не использую msgbox, скрипт выполняется так быстро, что функция заканчивается (с результатом True как результат), прежде чем ExecWB изменит начало диалога печати. Также без диалогового окна печати документ не отправляется на принтер.
Есть ли способ проверить, был ли ExecWB полностью выполнен. Я попытался проверить значение objIE.busy в цикле, но это тоже не работает.
Public Function PrintHTML(filePath As String, Optional visibleBrowser As Boolean = False) As Boolean
'-------------------------------------------------------------------------------
' Procedure : PrintHTML
' DateTime : 12/31/2007 12:53 PM 12:53
' Author : Aaron Bush
' Purpose : To print a html file.
' Input(s) : filePath - The path to the file you wish to print.
' Output(s) : True - No error encountered.
' False - Error found.
' Remarks : Free for public use.
' Requires reference to Microsoft Internet Controls. to set a
' reference, go to Tool, References, and select
' "Microsoft Internet Controls". If library is not present then
' click "browse" and browse to C:\Windows\System32\shdocvw.dll.
'-------------------------------------------------------------------------------
Dim objIE As SHDocVw.InternetExplorer
On Error GoTo Err_Hnd
'Instantiate a instance of Internet Explorer:
Set objIE = New SHDocVw.InternetExplorer
'Set visibility:
objIE.Visible = visibleBrowser
'Load specified file:
objIE.Navigate filePath
'Wait for file to load:
Do Until objIE.ReadyState = READYSTATE_COMPLETE
Loop
'Print:
objIE.ExecWB 6, 1, 0, 0
'MsgBox ("wait")
'Flag as error free:
PrintHTML = True
Exit_Proc:
On Error Resume Next
'Close browser:
objIE.Quit
Exit Function
Err_Hnd:
VBA.MsgBox "Error " & VBA.Err.Number & " in procedure PrintHTML of Module" & m_strModuleName_c & vbNewLine & VBA.Err.Description, vbMsgBoxSetForeground Or vbSystemModal, "Error - " & m_strModuleName_c & ".PrintHTML"
Resume Exit_Proc
End Function
Кто-нибудь нашел эквивалентное выражение для PowerShell, которое работает? 'Пока ($ ie.Busy) {Start-Sleep 1}', похоже, не помогает. – tresf
@QZПоддержка, которое должно работать, но, возможно, проверить свойство '.ReadyState' вместо' .Busy'. –
Не повезло с этим ... 'While (ie.Busy -or $ ie.ReadyState -ne 4) {Start-Sleep 1}'. Отладка COM-объекта не появляется. ExecWB правильно помещает либо свойство (Windows 10, IE11 \) – tresf