簡體   English   中英

打印已打開 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 瀏覽器 object (在第二個例子中)

如果您看到第一個代碼示例,那么您會注意到您正在將IE 文檔分配給IE object

Set IE = objShell.Windows(intWinNo).Document

您需要分配IE 瀏覽器 object而不是文檔 object來解決此問題。

下面是修改后的代碼,它工作正常。

 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

您可以嘗試在您身邊運行此示例,並讓我們知道它是否適合您。 讓我們知道是否有任何不清楚的地方。 我會盡力為它提供建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM