【问题标题】:VBA InternetExplorer page loading errorVBA InternetExplorer 页面加载错误
【发布时间】:2016-09-26 18:55:40
【问题描述】:

当我使用 F5 运行下面的代码时,它会在此行显示错误消息 "Object variable or with block variable not set" (Set DivClasses = HTMLDoc.getElementsByClassName("srp_containerfl ")),因为点击按钮后页面没有完全加载,(Do While IEObj.readyState 4 or IEObj.Busy: DoEvents: Loop) 这行代码不能正常工作,因为它在完全加载页面之前会进入下一行。

如果我手动运行此代码并给一些时间来加载页面,它运行良好。

Sub Fetch_NaukriDotCom_Data()

Dim IEObj                   As InternetExplorer
Dim HTMLDoc                 As MSHTML.HTMLDocument
Dim divcl                   As MSHTML.IHTMLElement
Dim DivClass                As MSHTML.IHTMLElement
Dim DivClasses              As MSHTML.IHTMLElementCollection
Dim DataContainer           As MSHTML.IHTMLElement
Dim DataContainerChild      As MSHTML.IHTMLElement
Dim DataContainerChilds     As MSHTML.IHTMLElementCollection
Dim DataOneContainer        As MSHTML.IHTMLElement
Dim DataOneContainers       As MSHTML.IHTMLElementCollection
Dim StrClassName            As String
Dim Int_i                   As Integer

Set IEObj = New InternetExplorer
IEObj.Visible = True
IEObj.navigate "https://www.naukri.com/"

With IEObj
    Do While .readyState <> 4 Or .Busy: DoEvents: Loop

    .document.getElementsByName("qp").Item.innerText = "VBA Developer"
    .document.getElementsByName("ql").Item.innerText = "Noida"
    .document.getElementById("qsbFormBtn").Click
End With

Do While IEObj.readyState <> 4 Or IEObj.Busy: DoEvents: Loop 'This loop is not working properly, as it is going
                                                             'to next line, without completely loading the page

Set HTMLDoc = New MSHTML.HTMLDocument
Set HTMLDoc = IEObj.document
Set DivClasses = HTMLDoc.getElementsByClassName("srp_container fl  ") 'Here Error occuring

Set DataContainerChilds = DivClasses.Item.Children

结束子

请帮我解决这个问题。

谢谢 卡西夫

【问题讨论】:

  • 也许只是IEObj.navigate "https://www.naukri.com/vba-developer-jobs-in-noida"

标签: excel vba


【解决方案1】:

是的 IE 有时很有趣,因此我使用它

替换

Do While IEObj.readyState <> 4 Or IEObj.Busy: DoEvents: Loop

Do While IEObj.readyState <> 4 Or IEObj.Busy: Wait 5 : Loop

然后将此过程粘贴到代码的末尾。 Wait 5 表示等待 5 秒再检查状态。

Private Sub Wait(ByVal nSec As Long)
    nSec = nSec + Timer
    While nSec > Timer
        DoEvents
    Wend
End Sub

【讨论】:

  • 感谢您的回复,但它仍然无法正常工作,当我使用 F5 运行此代码时,它在线上给我一个错误(Set DataContainerChilds = DivClasses.Item.Children),当我手动将光标放在行上( Set DivClasses = HTMLDoc.getElementsByClassName("srp_container fl ")) 并使用 F8 手动运行,它没有给我一个错误并且运行良好,为什么?请帮我。卡西夫。
猜你喜欢
  • 2012-09-01
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多