0
I am programming in VBA a collection of information on the website of the central bank. It turns out that the page does not fully load and when the macro ends only a few records were loaded into the spreadsheet. I believe that the page has some event that carries the registration as the user scrolls down the page. Has anyone ever had this problem? How did you solve it? Follow the code.
Sub capDadosTable()
Dim IE As Object
Dim e As Object
Dim el As Object
Set IE = CreateObject("InternetExplorer.Application")
With IE
'página com o formulario a ser preenchido
.Navigate "https://www3.bcb.gov.br/expectativas/publico/consulta/serieestatisticas"
.Visible = True
'aguarda a página carregar por completo
While .busy Or .ReadyState <> 4
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 1)
Wend
'seleciona o item do combobox 'indicador',pelo Index, neste caso o item 4
.document.GetElementByID("indicador").selectedindex = 4
'força rodar o evento do combobox
.document.all("indicador").FireEvent ("onchange")
'aguarda a página carregar por completo
While .busy Or .ReadyState <> 4
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 1)
Wend
'Seleciona o indicador IPCA
.document.GetElementByID("grupoIndicePreco:opcoes_5").Click
'seleciona o item do combobox 'calculo' pelo Index, neste caso o 2
.document.GetElementByID("calculo").selectedindex = 2
'seleciona a periodicidade anual
.document.GetElementByID("periodicidade").selectedindex = 2
'força rodar o evento do combobox
.document.all("periodicidade").FireEvent ("onchange")
'aguarda a página carregar por completo
While .busy Or .ReadyState <> 4
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 1)
Wend
'inclui a data de inicio no combobox tfDataInicial - primeiro dia do ano anterior
.document.all("tfDataInicial").Value = Format(DateSerial(Year(Now) - 1, 1, 1), "dd/mm/yyyy")
'inclui a data de hoje no combobox tfDataFinal
.document.all("tfDataFinal").Value = Format(Now(), "dd/mm/yyyy")
'testa a lista de anos do combobox AnoInicial, se for igual ao ano corrente, seleciona-o.
Set e = .document.all("divPeriodoRefereEstatisticas:grupoAnoReferencia:anoReferenciaInicial")
For Each o In e.Options
If o.Text = Format(Year(Now), "@") Then
o.Selected = True
Exit For
Set e = Nothing
End If
Next
'testa a lista de anos do combobox AnoFinal, se for igual ao ano corrente, seleciona-o.
Set e = .document.all("divPeriodoRefereEstatisticas:grupoAnoReferencia:anoReferenciaFinal")
For Each o In e.Options
If o.Text = Format(Year(Now), "@") Then
o.Selected = True
Exit For
Set e = Nothing
End If
Next
'clica no botão que gerará a tabela com os resultados
.document.all("btnConsultar").Click
'aguarda a página carregar por completo
While .busy Or .ReadyState <> 4
Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 1)
Wend
'**************************************************
'Carrega os dados da tabela gerada para a Sheets IPCA
Set sh = Sheets("IPCA")
Set tabela = IE.document.all.tags("tr")
linha = 1
For Each el In tabela
If el.innertext = "" Then GoTo proximo
sh.Cells(linha, 1) = el.innertext
linha = linha + 1
proximo:
Next
End With
End Sub