0
我正在VBA中編寫代碼,在幾個網站中輸入在搜索字段中輸入日期,然後獲取該日期找到的號碼列表。VBA從網站獲取信息
該代碼工程,當我debuggind按F8鍵,但是當我運行宏它有時工作有時不會。當我收到錯誤消息時,我只需按下調試按鈕,然後按F5繼續執行宏,並按照它的原理工作。問題總是occours與行:
Call IE.document.GetElementsByID("........")
該錯誤消息:運行時錯誤「424」,則需要的對象。
我認爲問題是頁面沒有加載,但我不確定。
Sub PegarDadosListas(data As Date)
Dim contador As Integer
Dim dia As String
Dim mes As String
Dim ano As String
dia = Day(data)
mes = Month(data)
ano = Year(data)
Range("K2").End(xlToRight).Offset(0, 1) = data
Call Extra(dia, mes, ano)
Call Pontofrio(dia, mes, ano)
End Sub
Sub Extra(dia As String, mes As String, ano As String)
Dim URL As String
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
URL = "http://www.extra.com.br/listadecasamento/home.aspx"
IE.Navigate URL
Do While IE.Busy
DoEvents
Loop
Call IE.document.getelementbyid("ctl00_Conteudo_PaginaSistemaArea1_ctl04_txtDia").setattribute("value", dia)
Call IE.document.getelementbyid("ctl00_Conteudo_PaginaSistemaArea1_ctl04_txtMes").setattribute("value", mes)
Call IE.document.getelementbyid("ctl00_Conteudo_PaginaSistemaArea1_ctl04_txtAno").setattribute("value", ano)
IE.document.getelementbyid("ctl00_Conteudo_PaginaSistemaArea1_ctl04_btnEncontrarLista").Click
Do While IE.Busy
DoEvents
Loop
Sheets("Plan2").Range("A4") = IE.document.getelementsbyclassname("pagination")(0).innertext
Sheets("Plan2").Range("A2").FormulaR1C1 = "=MID(R4C1,R3C1,40)"
Sheets("Plan2").Range("A3").FormulaR1C1 = "=FIND(""pesquisa"",R4C1)"
IE.Quit
Call CopiaeCola(3)
End Sub
Sub Pontofrio(dia As String, mes As String, ano As String)
Dim URL As String
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False
URL = "http://www.pontofrio.com.br/Site/ListaGerenciadaCasamentoWelCome.aspx"
IE.Navigate URL
Do While IE.Busy
DoEvents
Loop
With IE
Call .document.getelementbyid("ctl00_Conteudo_ctl01_CtrlBuscarLista_txtDia").setattribute("value", dia)
Call .document.getelementbyid("ctl00_Conteudo_ctl01_CtrlBuscarLista_txtMes").setattribute("value", mes)
Call .document.getelementbyid("ctl00_Conteudo_ctl01_CtrlBuscarLista_txtAno").setattribute("value", ano)
.document.getelementbyid("ctl00_Conteudo_ctl01_CtrlBuscarLista_btnEncontrarLista").Click
Do While IE.Busy
DoEvents
Loop
Sheets("Plan2").Range("A4") = IE.document.getelementsbyclassname("pagination")(0).innertext
Sheets("Plan2").Range("A2").FormulaR1C1 = "=MID(R4C1,R3C1,40)"
Sheets("Plan2").Range("A3").FormulaR1C1 = "=FIND(""pesquisa"",R4C1)"
End With
IE.Quit
Call CopiaeCola(4)
End Sub
嗨安迪,謝謝你的回答。 我使用的是不同的代碼之前,我用的是: '做 的DoEvents 循環,直到IE.READYSTATE = 4' 是不是他們的samething? 我會chenge礦類似: '不要同時IE.ReadyState <> READYSTATE_COMPLETE 的DoEvents loop' 我不熟悉的睡眠方法,但我會考慮的! 謝謝 – FRebelo
READYSTATE的值爲4,所以這些都是一樣的。 (使用4可能是必要的,具體取決於您從哪個應用程序運行代碼。)我已更新我的答案以包含Sleep方法。 –
謝謝! 我會在我的代碼中包含睡眠並將其更改回readystate! – FRebelo