Как убедиться, что все части макроса работают правильно? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть этот фрагмент кода, который должен последовательно нажимать несколько кнопок на веб-сайте.

For Each Element In Ie.getElementsByTagName("a")
    If Element.innerText = "Advanced Search" Then
        'Debug.Print element.innerText
        '**element.Click**
        Exit For
    Else
    End If
Next Element

Set objShell2 = CreateObject("Shell.Application")
IE_count = objShell2.Windows.Count

For X = 0 To (IE_count - 1)
    On Error Resume Next
    my_url = objShell2.Windows(X).Document.Location
    my_title = objShell2.Windows(X).Document.Title
    MsgBox ("The title of this page is: " & my_title)


    If my_title Like "Client List Management" & "*" Then
        Set ie2 = objShell2.Windows(X).Document
        my_title3 = ie2.Title
        MsgBox ("The title of Client List Management is: " & my_title3)
        Exit For
    Else
    End If

Next

For Each Element In ie2.getElementsByTagName("a")
    If Element.innerText = "Accounts" Then
        'Debug.Print element.innerText
        '**element.Click**
        Exit For
    Else
    End If
Next

For Each Element In ie2.getElementsByTagName("a")
  If Element.innerText = "SEARCH" Then
        'Debug.Print element.innerText
        '**element.Click**
        Exit For
    Else

    End If
Next

For Each Element In ie2.getElementsByTagName("a")
    If Element.innerText = "BATCH EXPORT" Then
        'Debug.Print element.innerText
        '**element.Click**
        Exit For
    Else
    End If
Next

Проблема в том, что когда я запускаю весь макрос, нажимается только первая кнопка (кнопка «Расширенный поиск») и ничего не происходит с остальными, которые следует нажимать после нажатия кнопки «Расширенный поиск».

Однако, когда я пытаюсь отладить свой код и переходить к каждому шагу программы, нажимается каждая кнопка, на которую нужно нажать. Все отлично работает, когда я дебютирую. Единственная проблема заключается в том, что программа на самом деле работает самостоятельно.

Знаете ли вы, как решить эту проблему?

Спасибо :)

1 Ответ

2 голосов
/ 26 июня 2019

Если синхронизация является проблемой, то вы можете подождать, пока Internet Explorer не будет занят, и readystate равно 4.

Попробуйте разместить While Ie.readyState <> 4 Or Ie.Busy: DoEvents: Wend в разделах, где может загружаться страница.(после навигации, нажатия кнопок и т. д.).


Если все говорят, что этого недостаточно, вы всегда можете поиграть с помощью спящего API.

#If VBA7 And Win64 Then
    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Iбудет делать это только в том случае, если вы не можете заставить работать указанное выше ожидание.


Readystate 4 означает, что запрос был отправлен, сервер завершил возврат ответа иБраузер завершил загрузку содержимого ответа.

Занят из Документация Microsoft описывается как:

Получает значение, указывающее, является лиобъект занят навигацией или операцией загрузки.

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