Как вводить данные в текстовое поле Inte rnet explorer, используя VBA Excel - PullRequest
0 голосов
/ 10 января 2020

Я полный новичок ie для Excel VBA, но то, что я пытаюсь сделать sh, это ввести текст в текстовое поле, код которого

 <input name="txt_invoiceno" type="text" maxlength="16" id="txt_invoiceno" tabindex="1" class="text-left" style="width:150px;"> 

Это мой код VBA

Dim Inv as Object
Inv = ie.Documents.getelementsbyId("txt_invoiceno")
Inv.value="mytext"

Это просто вызывает ошибку

Объект не поддерживает это свойство или метод.

Я что-то делаю неправильно? Пожалуйста, кто-нибудь даст мне код для ввода текста в элемент.

Ответы [ 2 ]

1 голос
/ 10 января 2020

Вы Dim Inv As Object и объекты должны использовать Set:

Set Inv = ie.Documents.getElementsById("txt_invoiceno")

Затем вам нужно проверить, был ли найден Inv, например, If Not Inv Is Nothing Then, прежде чем продолжить его использование. Также убедитесь, что идентификатор txt_invoiceno существует только один раз в документе HTML, в противном случае HTML недопустим (а Inv является массивом текстовых полей).

Для получения дополнительной информации см. Также: Как получить значение поля ввода текста, используя JavaScript? Это для JavaScript, но работает соответствующим образом в VBA.

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

Во-первых, как сказал PEH, после использования оператора Dim Inv As Object для определения объекта нам нужно использовать оператор Set для установки значения.

Кроме того, обратите внимание на следующие параметры: если мы хотим найти элемент по свойству ID, он вернет один элемент, а если мы хотим найти элементы по свойству тега, класса или имени, он вернет несколько элементов.

IE.document.getelementbyid("ID").value = "value"       'Find by ID
IE.document.getelementsbytagname("ID").value = "value"        'Find by tag
IE.document.getelementsbyclassname("ID").value = "value"      'Find by class
IE.document.getelementsbyname("ID").value = "value"           'Find by name

Поэтому, пожалуйста, измените ваш код, как показано ниже (добавьте оператор Set, измените documents на document, измените getelementsbyId на getelementbyId):

    Dim Inv As Object
    Set Inv = IE.document.getelementbyId("txt_invoiceno")
    Inv.Value = "mytext"

Редактировать

Ресурс веб-страницы:

<form id="form1"> 
    <input name="txt_invoiceno" type="text" maxlength="16" id="txt_invoiceno" tabindex="1" class="text-left" style="width:150px;"> 
</form>

Сценарий VBA:

Sub Test()
    Dim IE As Object

    Dim startDateText As Object, endDateText As Object

    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = True
        .Navigate "https://dillion132.github.io/default.html"

        While IE.ReadyState <> 4
            DoEvents
        Wend

        Dim Inv As Object
        Set Inv = IE.document.getelementbyId("txt_invoiceno")
        Inv.Value = "mytext"

    End With
    Set IE = Nothing
End Sub
...