Excel VBA - Win10, IE11 - открытие второй веб-страницы не работает - PullRequest
0 голосов
/ 28 октября 2019

мы перешли на win10 и IE11, и некоторые из моих макросов vba перестали работать. Я мог бы решить некоторые, но у меня возникли проблемы с решением следующей проблемы.

У меня есть макрос, который открывает веб-страницу в IE. Эта веб-страница открывается только для входа в базу данных. Есть список клиентов. У каждого клиента есть определенный идентификатор, который отражается также в URL. Вместо поиска в HTML-коде, я просто ввожу этот специфический для клиента URL в IE. Проблема в том, что это перестало работать на Win 10 IE11. Первая страница (та, которая использовалась для входа) открывается, но затем второй URL не вводится, и макрос застревает, пока он ждет до этой второй, загруженной для клиента страницы. Существует также третья страница, к которой мне нужно получить доступ, и ее URL-адрес одинаков для каждого клиента, поэтому мне нужно сначала войти на страницу входа в систему, затем на страницу конкретного клиента, а затем на третью страницу, где находится список устройств для этого клиента. Переход непосредственно на страницу со списком устройств не работает. Кроме того, я не получаю никаких ошибок или чего-то подобного.

Вот мой код:

        Dim ie As Object
        Set ie = CreateObject("InternetExplorer.Application")

        ie.Visible = True
        ie.Document.Focus

        ie.Navigate "https://webpage_used_to_log_in.com"
        While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
            DoEvents
        Wend

        ie.Navigate = "https://customer_specific_webpage.com"
        While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
            DoEvents                         'the macro stucks here as customer page is never entered and opened
        Wend

        ie.Navigate = "https://device_list.com"
        While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
            DoEvents  
        Wend                       

Это прекрасно работало в Win7 и IE11. Я не мог найти решение этой проблемы. Если у вас есть идеи, как это можно исправить, я буду очень признателен за вашу помощь. Спасибо.

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

это не может работать:

While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
  DoEvents
Wend

Вы устанавливаете противоположные условия: браузер должен быть занят или должен быть установлен ReadyState Завершить для продолжения цикла. Так что это бесконечный цикл.

Вот как это работает:

Sub LOADIE()
  Dim ie As Object
  Set ie = CreateObject("InternetExplorer.Application")
  ie.Visible = True

  ie.Navigate "https://www.google.com"
  Do Until ie.ReadyState = 4: DoEvents: Loop

  ie.Navigate "https://www.stackoverflow.com"
  Do Until ie.ReadyState = 4: DoEvents: Loop

  ie.Navigate "https://www.bing.com"
  Do Until ie.ReadyState = 4: DoEvents: Loop
End Sub

Все, что вам нужно сделать, это проверить занят или ReadyState . Мне также интересно, почему страница входа в систему должна вызываться, если она вообще отсутствует.

С наилучшими пожеланиями

Zwenn

0 голосов
/ 31 октября 2019

Вот что у меня работает:

    Dim ie As Object
    Set ie = New InternetExplorerMedium  'used this to fix the issue with reading data from html code

    ie.Visible = True
    ie.Document.Focus

    ie.Navigate "https://webpage_used_to_log_in.com"
    Do Until.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop

    ie.Navigate = "https://customer_specific_webpage.com"
    Do Until.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop

    ie.Navigate = "https://device_list.com"
    Do Until.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Loop   

Спасибо всем за помощь.

0 голосов
/ 29 октября 2019

Возможно, знак равенства = во втором и третьем ie.Navigate вызывает проблему. Я думаю, что это неправильное выражение. Приведенный ниже код может хорошо работать в моем IE11 в win10, вы можете попробовать:

Sub LOADIE()
    Dim ie As Object
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True

    ie.Navigate "https://www.google.com"
    While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Wend

    ie.Navigate "https://www.stackoverflow.com"
    While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Wend

    ie.Navigate "https://www.bing.com"
    While ie.Busy Or ie.ReadyState = READYSTATE_COMPLETE
        DoEvents
    Wend
End Sub
...