Excel VBA - Win10、IE11 - 打开第二个网页不工作

Excel VBA - Win10, IE11 - opening second webpage is not working

我们已经迁移到 win10 和 IE11,我的一些 vba 宏停止工作。我可以解决一些问题,但我无法解决以下问题。

我有一个宏,可以在 IE 中打开网页。打开此网页只是为了登录数据库。有一份客户名单。每个客户都有特定的 ID,这也反映在 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 中完美运行。我找不到解决这个问题的方法。如果您知道如何解决这个问题,我将非常感谢您的帮助。谢谢。

可能是第二个和第三个 ie.Navigate 中的等号 = 导致了问题。我认为这是一个错误的表达方式。下面的代码在我的win10下的IE11下可以正常运行,你可以试试:

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.whosebug.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

这行不通:

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

您设置了相反的条件,即浏览器必须 Busy 或者 ReadyState 必须设置为 Complete 循环继续。所以这是一个无限循环。

这是它的工作原理:

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.whosebug.com"
  Do Until ie.ReadyState = 4: DoEvents: Loop

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

您所要做的就是检查 busyReadyState。我也想知道如果根本没有登录,为什么必须调用登录页面。

此致

兹文

这是对我有用的:

    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   

谢谢大家的帮助。