MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


    [Resolvido]Access - Integração com a Web

    avatar
    Nill2013Br
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 14/05/2013

    [Resolvido]Access - Integração com a Web Empty [Resolvido]Access - Integração com a Web

    Mensagem  Nill2013Br em 24/3/2019, 00:53

    Olá pessoal, estou tentando desenvolver um BD que navegue na internet e informe dois campos no site e após a pesquisa preencha a tabela com o resultado. O problema é que não sei como fazer um loop para que pule para a próxima linha da tabela para preencher com os próximos dados a serem consultados. Segue a BD em anexo. Fico agradecido por quem puder ajudar.


    Segue o código que estou trabalhando:

    Código:
    Sub lsPesquisarCEPFaixa()

    'Declara Variáveis Internet
    Dim IE                  As InternetExplorer
    Dim lCidade             As String
    Dim lUF                 As String
    Dim lUltimaLinhaAtiva   As Long
    Dim lContador           As Long

    'Declara Variáveis Access
    Dim dbsAccessToWebPage As DAO.Database
    Dim rsUF As DAO.Recordset
    Dim rsCID As DAO.Recordset
    Dim rsSQL As DAO.Recordset
    Dim strSQL As String

    'Identifica a última linha populada da Tabela
    lUltimaLinhaAtiva = CurrentDb.OpenRecordset("Tabela1").RecordCount

    'MsgBox lUltimaLinhaAtiva

    'Cria um objeto Internet Explorer
    Set IE = New InternetExplorer

    'Torna o objeto visível
    IE.Visible = True

    'Faz um loop por todas as linhas da Tabela
    For lContador = 1 To lUltimaLinhaAtiva

        'Navega ao site dos correios
        IE.Navigate "http://www.buscacep.correios.com.br/sistemas/buscacep/buscaFaixaCep.cfm"

        'Identifica se a página já foi totalmente carregada
            While IE.ReadyState <> READYSTATE_COMPLETE
            Wend

            'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
            'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
            'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
            'mais rápida a execução.
            sng = Timer
            Do While sng + 3 > Timer
            Loop

                'Carrega os dados de cidade e UF que serão preenchidos na página
      
                Set dbsAccessToWebPage = CurrentDb
                Set rsUF = dbsAccessToWebPage.OpenRecordset("Tabela1")
                Set rsCID = dbsAccessToWebPage.OpenRecordset("Tabela1")
                                        
                lUF = rsUF!ESTADO
                lCidade = rsCID!LOCALIZADO

                'Carrega os dados de cidade e UF na página e submente os dados do formulário
                IE.Document.all("UF").Value = lUF
                IE.Document.all("Localidade").innertext = lCidade
                IE.Document.Forms("Geral").submit

                'Identifica se a página já foi totalmente carregada
                While IE.ReadyState <> READYSTATE_COMPLETE
                Wend

         'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop

         'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido.
        'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha
        'da planilha
        For Each i In IE.Document.body.getElementsByTagName("table")
            If InStr(i.innertext, "Faixa de CEP") > 0 Then
                For Each l In i.getElementsByTagName("tr")
                    If InStr(l.innertext, lCidade) Then
                        [table][tr][td][/td][/tr][/table]CurrentDb.Execute "UPDATE Tabela1 SET FAIXA_CEP = '" & l.getElementsByTagName("td")(1).innertext & "' WHERE LINHA = " & lContador
                    End If
                Next l
            End If
        Next i
    Next lContador

    MsgBox "Concluído!"

    End Sub
    Anexos
    [Resolvido]Access - Integração com a Web AttachmentPesquisa Faixa de Cep.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (42 Kb) Baixado 10 vez(es)
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 412
    Registrado : 01/08/2011

    [Resolvido]Access - Integração com a Web Empty Re: [Resolvido]Access - Integração com a Web

    Mensagem  ronaldojr1 em 25/3/2019, 18:35

    Boa Tarde,
    Fiz uma modificação na logica de funcionamento.
    O código ira pesquisar apenas as cidades que nao foi preenchido a faixa de CEP.

    Do jeito que estava era aberto todos os registros novamente.

    abaixo funções criadas e em anexo segue arquivo do access com o codigo em funcionamento.

    Código:

    Sub lsPesquisarCEPFaixa2()
    'Código atualizado por Ronaldo Xavier Souza Junior(Ronaldojr1) em 25/03/2019
    'no forum MaximoAccess

    'Declara Variáveis Internet
    Dim IE As InternetExplorer
    Dim lUltimaLinhaAtiva   As Long

    'Declara Variáveis Access
    Dim rsSQL As DAO.Recordset

    'o recordset carrega apenas os registros que nao estejam preenchidos a faixa de cep
    Set rsSQL = CurrentDb().OpenRecordset("Select * from Tabela1 where isnull (Faixa_Cep)")

    'so executa se houver dados
    If rsSQL.RecordCount > 0 Then

    'esses dois codigos é necessario para a funcao RecordCount retornar o valor correto dos registros
    rsSQL.MoveLast
    rsSQL.MoveFirst

    lUltimaLinhaAtiva = rsSQL.RecordCount

    'Cria um objeto Internet Explorer
    Set IE = New InternetExplorer

    'Torna o objeto visível
    IE.Visible = True

    'Faz um loop por todas as linhas da Tabela
    Do While Not rsSQL.EOF
        updateTabelaFaixaCEP rsSQL!ESTADO, rsSQL!LOCALIZADO, rsSQL!linha, IE
        rsSQL.MoveNext
    Loop
    IE.Quit
    MsgBox lUltimaLinhaAtiva & " Faixas de CEP atualizadas com sucesso!!!", vbOKOnly + vbInformation, "Concluído"
    End If

    End Sub

    Function updateTabelaFaixaCEP(uf As String, cidade As String, indexRegistro As Integer, IE As InternetExplorer)
    Dim sng
    Dim l
    Dim i

        'Navega ao site dos correios
        IE.Navigate "http://www.buscacep.correios.com.br/sistemas/buscacep/buscaFaixaCep.cfm"

        'Identifica se a página já foi totalmente carregada
            While IE.ReadyState <> READYSTATE_COMPLETE
            Wend

            'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
            'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
            'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
            'mais rápida a execução.
            sng = Timer
            Do While sng + 3 > Timer
            Loop

            'Carrega os dados de cidade e UF na página e submente os dados do formulário
            IE.Document.all("UF").Value = uf
            IE.Document.all("Localidade").innertext = cidade
            IE.Document.Forms("Geral").submit

            'Identifica se a página já foi totalmente carregada
            While IE.ReadyState <> READYSTATE_COMPLETE
            Wend

         'Como a página possui JavaScript que cria os objetos que são preenchidos após a carga completa, é necessário
        'aguardar um tempo, coloquei 3 segundos, alterar conforme a necessidade.
        'Caso não tenha javascript na criação dos objetos da página comentar esta parte do código, pois será bem
        'mais rápida a execução.
        sng = Timer
        Do While sng + 3 > Timer
        Loop

         'Faz um loop pelos objetos do tipo table na página e procura pelo campo Faixa(s) de CEP: preenchido.
        'Em seguida busca pela segunda coluna da linha de faixa de CEP e armazena esta informação diretamente na coluna C da linha
        'da planilha
        For Each i In IE.Document.body.getElementsByTagName("table")
            If InStr(i.innertext, "Faixa de CEP") > 0 Then
                For Each l In i.getElementsByTagName("tr")
                    If InStr(l.innertext, cidade) Then
                        CurrentDb.Execute "UPDATE Tabela1 SET FAIXA_CEP = '" & l.getElementsByTagName("td")(1).innertext & "' WHERE LINHA = " & indexRegistro
                    End If
                Next l
            End If
        Next i
    End Function

    cheers
    Anexos
    [Resolvido]Access - Integração com a Web AttachmentPesquisa Faixa de Cep.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (35 Kb) Baixado 12 vez(es)
    avatar
    Nill2013Br
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 23
    Registrado : 14/05/2013

    [Resolvido]Access - Integração com a Web Empty Re: [Resolvido]Access - Integração com a Web

    Mensagem  Nill2013Br em 25/3/2019, 19:36

    Obrigado ronaldojr1 pela ajuda, funcionou legal.
    ronaldojr1
    ronaldojr1
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 412
    Registrado : 01/08/2011

    [Resolvido]Access - Integração com a Web Empty Re: [Resolvido]Access - Integração com a Web

    Mensagem  ronaldojr1 em 26/3/2019, 01:05

    que bom que funcionou.
    o fórum agradece o retorno.

    cheers

    Conteúdo patrocinado

    [Resolvido]Access - Integração com a Web Empty Re: [Resolvido]Access - Integração com a Web

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 19/7/2019, 14:02