打印已经打开的 Internet Explorer

Print already opened Internet explorer

我正在尝试打印已打开但无法运行的 Internet Explorer 页面。代码如下:

 Sub Already_Opened()

    On Error Resume Next
    Set objShell = CreateObject("Shell.application")
    intWinCnt = objShell.Windows.Count

    For intWinNo = 0 To (intWinCnt - 1)
      StrWinTitle = objShell.Windows(intWinNo).Document.Title

      If StrWinTitle = "Google" Then
        Set IE = objShell.Windows(intWinNo).Document
        Exit For

      End If

      Next
        Const OLECMDID_PRINT = 6
        Const OLECMDEXECOPT_DONTPROMPTUSER = 2

        'Search box
        IE.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"

        'Search result Button
        IE.getElementsByClassName("gNO89b")(0).Click

        'Wait 5 Sec
        Application.Wait Now + TimeValue("00:00:05")

        'Print
        IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub

当我使用 Excel VBA 打开并导航到 Internet Explorer 然后打印时,它工作正常。以下代码有效:

Sub New_IE()

    Const OLECMDID_PRINT = 6
    Const OLECMDEXECOPT_DONTPROMPTUSER = 2

    Dim IE As Object
    Dim Doc As HTMLDocument

    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    IE.navigate "https://www.google.co.uk/"

    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop

    Set Doc = IE.Document

    'Search box
    Doc.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"

    'Search result Button
    Doc.getElementsByClassName("gNO89b")(0).Click

    'Print
    Application.Wait Now + TimeValue("00:00:05")
    IE.execWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

End Sub

我尝试检查两个示例代码并找到了问题的原因。

您说打印代码适用于第二个代码示例,但不适用于第一个代码示例。

如果您检查打印页面的代码行,您会注意到您正在使用 IE 浏览器对象。 (在第二个例子中)

如果您看到第一个代码示例,您会注意到您正在将 IE 文档 分配给 IE 对象

Set IE = objShell.Windows(intWinNo).Document

您需要分配 IE 浏览器对象 而不是 文档对象 才能解决此问题。

下面是修改后的代码,可以正常工作。

 Sub Already_Opened()
Dim IE As Object
    On Error Resume Next
    Set objShell = CreateObject("Shell.application")
    intWinCnt = objShell.Windows.Count

    For intWinNo = 0 To (intWinCnt - 1)
      StrWinTitle = objShell.Windows(intWinNo).document.Title

      If StrWinTitle = "Google" Then
        Set IE = objShell.Windows(intWinNo)
        Exit For

      End If

      Next
        Const OLECMDID_PRINT = 6
        Const OLECMDEXECOPT_DONTPROMPTUSER = 2

        'Search box
        IE.document.getElementsByClassName("gLFyf gsfi")(0).Value = "Earth"

        'Search result Button
        IE.document.getElementsByClassName("gNO89b")(0).Click

        'Wait 5 Sec
        Application.Wait Now + TimeValue("00:00:05")

        'Print
        IE.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
End Sub

您可以尝试 运行 您身边的这个样本,让我们知道它是否适合您。让我们知道是否有任何不清楚的地方。我会尽力为它提供建议。