我正在尝试从网站上获取数据&把它放在excel工作表中
方案: 网页包含id = btnAllRun的按钮。
当我点击按钮时,表格会动态生成,其中包含tr标签中的信息。 使用宏我需要数不。这样的tr标签&将计数放在工作表中。
代码:
Dim IE as Object
Sub Button_Click()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate URL
Do
DoEvents
Loop Until IE.ReadyState = 4 //waiting for the webpage to load
Set Elmt = IE.Document.getElementById("btnAllRun") //get button elmt for All Running
Elmt.Click //Clicking button
Do
DoEvents
Loop Until IE.ReadyState = 4
Set Tbl = IE.Document.getElementById("gvRunning") //gets table elmt containing tr tags
Sheets("XXX").Range("B36") = Tbl.Rows.Length - 1
当我尝试运行宏时,在步骤调试模式下运行相同的宏时,我得到'对象变量或未设置块'但,我得到了正确的结果。
对此的任何帮助将不胜感激!!
答案 0 :(得分:2)
如果它在调试模式下工作,则表示您的DoEvents
未按预期工作。在这种情况下,我使用自定义例程Wait
。所以我正在做的是强制代码等待一段特定的时间然后继续。对于速度较慢的系统,您可能需要增加时间。
Wait 2
基本上会暂停代码2秒钟。
试试这个。这在很多场合对我有用。
Dim IE As Object
Sub Button_Click()
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate URL
Do While IE.ReadyState <> 4: DoEvents: Loop
Wait 2
Set Elmt = IE.Document.getElementById("btnAllRun")
Wait 2
Elmt.Click
Do While IE.ReadyState <> 4: DoEvents: Loop
Wait 2
Set Tbl = IE.Document.getElementById("gvRunning")
Sheets("XXX").Range("B36") = Tbl.Rows.Length - 1
'
'~~> Rest of the code
'
End Sub
Private Sub Wait(ByVal nSec As Long)
nSec = nSec + Timer
While nSec > Timer
DoEvents
Wend
End Sub