2014-09-12 72 views
1

工作,我想从网站&获取数据的网页按钮互动把它在Excel工作表上使用Excel VBA只在步调试模式

场景: 网页包含使用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 

当我试图运行宏时得到“对象变量或与没有设置块”运行在步调试模式相同的宏我得到正确的结果,当

任何帮助,将不胜感激!

回答

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 
+0

谢谢Siddhart :)这就是我正在寻找! – Droidwala 2014-09-15 07:11:43