我需要使用VBA导航到一个页面。我创建了下面的代码,它工作得很好,直到我重新安装Windows。我不知道这是不是原因,但它不再起作用了。
有案例:
如果我在运行宏
之前没有登录第一部分,用于登录页面正常,但当我尝试导航到" http://cltd.ro/catalogsearch/result/?q=60041"时,我收到错误"方法'导航& #39;对象' IWebBrowser 2'失败"
如果我已登录该网站
另一方面,如果我在运行宏之前已经登录,那么代码正常工作,我到达了所需的页面,但是代码进入了循环" Do / DoEvents / Loop until ie.readystate = 4"永远,我无法继续
请帮忙! 谢谢!
Sub xx()
Dim ie As Object
Set ie = CreateObject("internetexplorer.application")
ie.Visible = True
AppActivate ie
apiShowWindow ie.hwnd, 3
ie.Visible = True
ie.navigate "http://cltd.ro/customer/account/login/"
Do
DoEvents
Loop Until ie.readystate = 4
On Error Resume Next 'in case I'm already loggen in
Call ie.Document.getElementById("email").setattribute("value", "dfgsdfg") 'not real value ;-)
Call ie.Document.getElementById("pass").setattribute("value", "dfgsdfg") 'not real value ;-)
Call ie.Document.getElementById("send2").Click
Do
DoEvents
Loop Until ie.readystate = 4
On Error GoTo 0 'cancels the resume next
Application.Wait (Now() + TimeValue("0:00:02"))
link = "http://cltd.ro/catalogsearch/resuilt/?q=60041"
ie.navigate link
Do
DoEvents
Loop Until ie.readystate = 4
'Other lines of code ...............
End Sub
答案 0 :(得分:0)
这不能回答你的实际问题,但是:
(1)在“等到文档准备就绪”循环中,您应始终处于超时状态。否则,如果页面没有准备好,那些循环可以永远等待。事实上,当我尝试手动导航(通过IE网址栏)到“http://cltd.ro/customer/account/login/”时,它会在那里旋转很长一段时间,直到我放弃并停止。您的代码应检测文档过于准备的情况,并回复“网站未响应60秒,您是否要继续等待?[是] [否]”。
(2)您不允许页面 准备好的情况,但它不是您想要的页面。例如,如果网站返回错误,或者IE决定将其计时,您将获得一个页面,其网址为“res:// ...” - 而不是您实际要求的页面。你不能只是假设你确实得到了正确的页面。
因此,您现有的代码可以用于1-off脚本,但对于正确的生产用途而言不够强大。