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