Распечатать уже открытый Inte rnet explorer - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь распечатать страницу Inte rnet 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 для открытия и перехода к Inte rnet 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

1 Ответ

0 голосов
/ 28 мая 2020

Я пытаюсь проверить оба образца кода и обнаружил причину проблемы.

Вы сказали, что код печати работает для 2-го примера кода, но не для 1-го примера кода.

Если вы проверите строку кода, которая печатает страницу, то вы можете заметить, что используете объект браузера IE . (во 2-м примере)

Если вы видите 1-й пример кода, вы можете заметить, что вы назначаете 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

Вы можете попробовать запустить этот образец на своей стороне и сообщить нам, работает он для вас или нет. Сообщите нам, если что-то неясно. Постараюсь дать предложения по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...