用VBA打印一个HTML文件

我一直在研究这一段时间,我已经拿出了下面的代码。 但是,我不断收到错误。 见下文。
这个代码的目的是生成一个HTML文档。 然后打开并从打印机打印文档。 我已经获得文件成功保存,甚至在IE窗口中打开它。 然后我得到错误。

Function generateResults() Dim resultsBrowser As SHDocVw.InternetExplorer Set resultsBrowser = New SHDocVw.InternetExplorer Dim resultsPath As String Dim resultsFile As String resultsPath = ThisWorkbook.Path & "\As-Run Test Results" If Len(Dir(resultsPath, vbDirectory)) = 0 Then MkDir resultsPath End If resultsFile = resultsPath & "\As-Run " & Format(Now, "mm-dd-yyyy hmmss") & ".html" Open resultsFile For Output As #1 Print #1, "<html><title>Test</title><body>Hello World</body></html>" Close #1 resultsBrowser.Navigate resultsFile Do While resultsBrowser.ReadyState = READYSTATE_COMPLETE Loop resultsBrowser.Stop resultsBrowser.ExecWB 7, 1 resultsBrowser.Quit Set resultsBrowser = Nothing End Function 

这是错误信息。

错误信息

当我去debugging时,VBAdebugging器指向以下行:

 resultsBrowser.ExecWB 7, 1 

我究竟做错了什么? 我的研究表明,这对其他人是有效的,但它似乎并不适合我。 另一个奇怪的是,如果我导航到about:blank而不是HTML文件并注释掉ReadyState检查循环,则会成功打印一个空白的Print Preview。

您需要使用InternetExplorerMedium而不是InternetExplorer ,因为在这篇文章中: https : //stackoverflow.com/a/19221313/6201755

(注意,为了使未来用户清楚, SHDocVw对象包含在Microsoft Internet控件参考库中,请确保在VBE中添加此引用。)

也作为上面的注释,这个Do While resultsBrowser.ReadyState = READYSTATE_COMPLETE它无限循环,所以你需要改变它为<>

这是工作代码:

 Private Sub test() Dim resultsBrowser As SHDocVw.InternetExplorerMedium Set resultsBrowser = New SHDocVw.InternetExplorerMedium Dim resultsPath As String Dim resultsFile As String resultsPath = ThisWorkbook.Path & "\As-Run Test Results" If Len(Dir(resultsPath, vbDirectory)) = 0 Then MkDir resultsPath End If resultsFile = resultsPath & "\As-Run " & Format(Now, "mm-dd-yyyy hmmss") & ".html" Open resultsFile For Output As #1 Print #1, "<html><title>Test</title><body>Hello World</body></html>" Close #1 resultsBrowser.Navigate resultsFile Do While resultsBrowser.ReadyState <> READYSTATE_COMPLETE Loop resultsBrowser.Stop resultsBrowser.ExecWB 7, 1 resultsBrowser.Quit Set resultsBrowser = Nothing End Sub