【问题标题】:Print an HTML file with VBA使用 VBA 打印 HTML 文件
【发布时间】:2016-05-27 16:40:21
【问题描述】:

我已经对此进行了一段时间的研究,并提出了以下代码。但是,我不断收到错误消息。见下文。
此代码的目的是生成 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

这是错误信息。

当我去调试时,VBA 调试器指向以下行:

resultsBrowser.ExecWB 7, 1

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

【问题讨论】:

  • 我猜你想说Do While resultsBrowser.ReadyState &lt;&gt; READYSTATE_COMPLETE。否则,我可以确认此代码对我有效。你能多谈谈你的环境吗?你在什么环境下运行这个?
  • 您需要使用InternetExplorerMedium 而不是InternetExplorer

标签: html excel vba printing


【解决方案1】:

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

(请注意,为了让未来的用户清楚这一点,SHDocVw 对象包含在 Microsoft Internet Controls 参考库中,请务必在 VBE 中添加此参考。)

和上面的评论一样,Do While resultsBrowser.ReadyState = READYSTATE_COMPLETE这行让它无限循环,所以你需要把它改成&lt;&gt;

这是工作代码:

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

【讨论】:

  • 谢谢。这非常有效。感谢您抓住无限循环。我实际上一直在运行,以防万一它引起问题。可能是我没有注意到的原因。
猜你喜欢
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
相关资源
最近更新 更多