VBA x IE - collect data from a table

0

I'm programming in VBA a collection of information on the central bank's website. It turns out that the page does not load fully and when the macro ends only a few records have been loaded in the worksheet. I believe the page has some event that will load the log as the user scrolls the page down. Has anyone 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
    
asked by anonymous 09.06.2017 / 16:47

0 answers