Изменение данных на сайте через VBA Excel - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь изменить значение на веб-сайте с помощью приведенного ниже кода, но как я могу нажать кнопку «Отправить» с помощью кода?

И что, если мое значение .Navigate должно продолжать двигаться с A1--> A2 -> и т. Д. Вместо статического значения? (Как использовать цикл «For» вместо .Navigate)?

Sub FillForm()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "https://www.morovia.com/bulk-check-digit-calculation/index.php"
IE.Visible = True
While IE.busy
DoEvents
Wend
IE.Document.All("").Value = ThisWorkbook.Sheets("Sheet1").Range("b1")
End Sub

Любая помощь приветствуется.Спасибо!

Ответы [ 3 ]

0 голосов
/ 08 декабря 2018

Несколько замечаний:

1) Вам необходимо использовать правильную строку ожидания в своем коде:

While ie.Busy Or ie.readyState < 4: DoEvents: Wend

2) Кнопка отправки имеетидентификаторОбычно это самый быстрый метод поиска, поэтому используйте его.

ie.document.querySelector("#submit").click

3) Используйте идентификаторы везде, где это возможно.Например, при вводе начального поискового номера

ie.document.querySelector("#sourceNumbers").value = ThisWorkbook.Sheets("Sheet1").Range("B1").value

4) Наиболее актуальный метод навигации:

ie.navigate2

5) Всегда иметь другую строку ожидания после .clickили .submit, чтобы разрешить странице загружать новое содержимое

6) Всегда не забывайте .Quit приложению предотвращать продолжение процессов и потенциально приводить к нехватке системных ресурсов.

Public Sub FillForm()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    With ie
        .Visible = True
        .Navigate2 "https://www.morovia.com/bulk-check-digit-calculation/index.php"

        While .Busy Or .readyState < 4: DoEvents: Wend
        .document.querySelector("#sourceNumbers").Value = ThisWorkbook.Sheets("Sheet1").Range("B1").Value

        .document.querySelector("#submit").Click

        While .Busy Or .readyState < 4: DoEvents: Wend

        Debug.Print .document.querySelector("#results").Value
        .Quit
    End With
End Sub

Цикл по ссылкам в столбцах A может выглядеть следующим образом:

Option Explicit
Public Sub LoopLinks()
    Dim ie As Object, ws As Worksheet, arr(), i As Long
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set ie = CreateObject("InternetExplorer.Application")
    arr = Application.Transpose(ws.Range("A1:A3").Value) '<== amend range as required

    With ie
        .Visible = True

        For i = LBound(arr) To UBound(arr)
            If InStr(arr(i, 1), "http") > 0 Then '<=check is an URL
                .Navigate2 arr(i)

                While .Busy Or .readyState < 4: DoEvents: Wend

                'do something......
            End If
        Next
        .Quit
    End With
End Sub
0 голосов
/ 09 декабря 2018
Sub FillForm()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "https://www.morovia.com/bulk-check-digit-calculation/index.php"
IE.Visible = True
While IE.busy
DoEvents
Wend
For i = 1 to 10 ' Loop according to your Number Of Rows Containing Values
Value = ThisWorkbook.Sheets("Sheet1").Range("B" & i).Value
IE.Document.getelementbyid("sourceNumbers").Value = Value
IE.Document.getelementbyid("submit").Click 'here submit should be in all small letters
Next i
End Sub
0 голосов
/ 08 декабря 2018
Sub FillForm()
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "https://www.morovia.com/bulk-check-digit-calculation/index.php"
IE.Visible = True
While IE.busy
DoEvents
Wend

Value = ThisWorkbook.Sheets("Sheet1").Range("b1")
IE.Document.getelementbyid("sourceNumbers").Value = Value
IE.Document.getelementbyid("submit").Click
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...