VBA: сделать скрытое поле видимым после проверки переключателя - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь заполнить форму с использованием VBA (просто чтобы получить больше навыков в программировании с VBA). Я заметил, что веб-форма не обновляет скрытое поле при проверке переключателя через VBA.

Чтобы быть более точным, скрытое поле не становится видимым после проверки переключателя.

В своем исследовании, почему я прочитал это: «События не будут (обычно) срабатывать при программном изменении данных». Если это предположение верно, в чем разница между заполнением формы вручную или программно? Но когда это предположение неверно, какие настройки мне нужно внести в мой код, чтобы сделать скрытые поля видимыми после нажатия этой кнопки-переключателя?

Сайт, с которым я работаю, принадлежит голландским налоговым органам: https://www.belastingdienst.nl/wps/wcm/connect/nl/auto-en-vervoer/content/hulpmiddel-motorrijtuigenbelasting-berekenen

Это мой код.

Sub Show_Hidden_Field()

    'Declaration section
    Dim htmlDoc As New MSHTML.HTMLDocument
    Dim objShell, objShellWindows, objShellWindow As Object
    Dim htmlOption As MSHTML.IHTMLElement

    'Wait an extra 3 seconds so you can switch to the IE window
    'and see what's going on
    Application.Wait Now + TimeValue("0:00:03")

    'Find the correct Internet Explorer window
    Set objShell = CreateObject("Shell.Application")
    Set objShellWindows = objShell.Windows

    For Each objShellWindow In objShellWindows
        If objShellWindow.Name = "Internet Explorer" Then
            'Find this window
            If objShellWindow.LocationURL = "https://www.belastingdienst.nl/wps/wcm/connect/nl/auto-en-vervoer/content/hulpmiddel-motorrijtuigenbelasting-berekenen" Then
                'This the correct page. Get the content of page
                Set htmlDoc = objShellWindow.document
                Exit For
            End If
        End If
    Next objShellWindow

    'Find the radio button . . .
    Set htmlOption = htmlDoc.getElementById("V1-1_True")
    '. . . and check it.
    htmlOption.Checked = True

    '**********************************************************************
    'I've also tried these options without succes.
    'htmlOption.Click
    'htmlOption.FireEvent ("onchange")

    'Or set the focus to another field
    '**********************************************************************
End Sub

1 Ответ

0 голосов
/ 10 января 2019

У вас есть пара проблем с вашим кодом. Во-первых, вы используете неправильный тип элемента радиокнопки.

Хотя htmlOption технически a MSHTML.IHTMLElement, более конкретно он должен иметь тип: MSHTML.HTMLInputElement. Поэтому измените вашу декларацию на:

Dim htmlOption As MSHTML.HTMLInputElement

Для вашей реальной проблемы, вы должны просто использовать .Click. Взгляните на developer.mozilla.org :

Метод HTMLElement.click() имитирует щелчок мыши на элементе.

Когда click() используется с поддерживаемыми элементами (такими как <input>), он запускает событие нажатия элемента . Это событие затем всплывает до элементов выше в дереве документа (или цепочке событий) и запускает их события щелчка. (выделение добавлено)

Таким образом, вам не нужно использовать .Checked = True, потому что, щелкнув элемент ввода, вы не только решите свою проблему с обнаружением скрытой области, но также одновременно измените значение на True.

Так что вы бы просто использовали это:

'Find the radio button . . .
Set htmlOption = htmlDoc.getElementById("V1-1_True")
'. . . and check it.
htmlOption.Click
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...