Excel отвечает на событие веб-DOM через VBA - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь ответить на нажатие кнопки на веб-сайте, открытом через Excel VBA.

Приведенный ниже код пытается заставить его работать в качестве теста с Duckduck go.

Веб-страница загружается нормально, но я просто не могу получить событие onclick, которое мне нужно сделать, чтобы получить значения из элементов ввода текста, которые будет заполнять пользователь.

Option Explicit

Private WithEvents IEButton As MSHTML.HTMLInputButtonElement

Public Sub Init(aButton As MSHTML.HTMLInputButtonElement)
    Set IEButton = aButton
End Sub

Private Function IEButton_onclick() As Boolean
    Debug.Print "Clicked"
    MsgBox "HI"
End Function
Private Sub cmdTest_Click()
    Dim ie As InternetExplorer, html As HTMLDocument
    Dim link As String
    link = "http://www.duckduckgo.com/"


    Set ie = New InternetExplorer

    With ie
        .Visible = True
        .navigate link
        While .Busy = True Or .readyState < 4
            DoEvents
        Wend

        Set html = .document

        Dim ieBut As New clsIEButton

       ieBut.Init html.querySelector("#search_button_homepage")


    End With


ShowWindow ie.hwnd, SW_SHOWMAXIMIZED
End Sub

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Как только cmdTest_Click завершается, все его локальные переменные уничтожаются, включая ieBut. Если вам нужно, чтобы это зависало до тех пор, пока кто-то не нажмет кнопку, вам нужно переместить

Dim ieBut As New clsIEButton

в верхнюю часть модуля, вне какой-либо дополнительной / функциональной функции.

Аналогичный код здесь: обнаружение события IE из visio

1 голос
/ 04 мая 2020

Веб-страница загружается нормально, но я просто не могу получить событие onclick, которое мне нужно сделать, чтобы получить значения из элементов ввода текста, которые будет заполнять пользователь.

Пожалуйста, обратитесь к следующему примеру кода:

Private ieBut As clsIEButton 'global variable.
Private Sub cmdTest_Click()
    Dim ie As InternetExplorer, html As HTMLDocument
    Dim link As String
    link = "http://www.duckduckgo.com/"

    Set ie = New InternetExplorer

    With ie
        .Visible = True
        .navigate link
        While .Busy = True Or .readyState < 4
            DoEvents
        Wend

        Set html = .document
        Set ieBut = New clsIEButton

        'transfer the button element and the html document.
        ieBut.Init html.getElementById("search_button_homepage"), html

    End With

End Sub

clsIEButton (модуль класса)

Option Explicit

Private WithEvents IEButton As MSHTML.HTMLInputButtonElement
Private html As MSHTML.HTMLDocument



Private Function IEButton_onclick() As Boolean
    Debug.Print "button: clicked!"
    'based on the html document to get the entered value.
    Debug.Print html.getElementById("search_form_input_homepage").Value

End Function


Public Sub Init(aButton As MSHTML.HTMLInputButtonElement, ahtml As MSHTML.HTMLDocument)
    Set IEButton = aButton
    Set html = ahtml
End Sub

После ввода значения и нажатия кнопки поиска вывод VBA выглядит как ниже:

enter image description here

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

Попробуйте эту часть

    Set html = .document
    html.queryselector("#search_form_input_homepage").Value = "Excel VBA"
    html.queryselector("#search_button_homepage").Click

Поставьте следующую строку перед действием Cick

Range("A1").value = html.queryselector("#search_form_input_homepage").Value
...