0
我在MS Access 2010中使用以下代码来打印HTML文件(本地)。等待ExecWB完成
它只有在我对msgbox(“wait”)行解除注释时才有效。打印对话框弹出,我可以打印文档。 如果我不使用msgbox,脚本执行速度如此之快以至于在ExecWB进行更改以启动打印对话框之前,该函数结束(以True结果)。此外,如果没有打印对话框,则文档不会发送到打印机。
有没有办法来检查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
@QZSupport应该工作 - 但也许测试'.ReadyState'属性而不是'.Busy'。 –
没有运气,或者... while(ie.Busy - 或$ ie.ReadyState -ne 4){Start-Sleep 1}'。调试COM对象时,不会出现ExecWB正确标记属性(Windows 10,IE11 \) – tresf