使用excel vba与网页上的按钮交互仅在步骤调试模式下工作

时间:2014-09-12 11:14:42

标签: html excel excel-vba vba

我正在尝试从网站上获取数据&把它放在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

当我尝试运行宏时,在步骤调试模式下运行相同的宏时,我得到'对象变量或未设置块',我得到了正确的结果。

对此的任何帮助将不胜感激!!

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