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
您所要做的就是检查 busy 或 ReadyState。我也想知道如果根本没有登录,为什么必须调用登录页面。
此致
兹文
这是对我有用的:
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
谢谢大家的帮助。
我们已经迁移到 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
您所要做的就是检查 busy 或 ReadyState。我也想知道如果根本没有登录,为什么必须调用登录页面。
此致
兹文
这是对我有用的:
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
谢谢大家的帮助。