Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
[RESOLVIDO] Excel para Access - Integração com a Web
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm
[RESOLVIDO] Excel para Access - Integração com a Web
Pessoal, boa tarde,
Sou iniciante nesse mundo de programação e estou muito interessado na criação de automatizações de tarefas na WEB.
Pesquisando na Internet encontrei um exemplo muito bacana de como Inserir e Capturar dados de uma página WEB, porém o exemplo aplica-se somente ao Excel.
Estou tentando alterar o código para que eu possa usá-lo no Access.
Minha ideia aqui é basicamente: (1º) Extrair os dados da minha tabela, (2º) inserir na página web, (3º) Interagir com os controles da página, (4º) Pegar o resultado e devolver para a tabela... Simples assim.
Quando executo o código abaixo recebe um erro de tipos incompatíveis.
Peço o auxílio de vocês.
Segue o código:
'Inclui referência ao Microsoft Internet Controls
Sub lReferenciaIE()
Dim ObRef
On Error Resume Next
'Para Access
Access.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
'Para Excel
'ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub
Sub lsPesquisarCEPFaixa()
'Inclui a referência se não houver
lReferenciaIE
'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 dbs As DAO.Database
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/sis ... ixaCep.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
lCidade = CurrentDb.OpenRecordset("SELECT LOCALIDADE FROM Tabela1 WHERE LINHA = " & lContador & "")
lUF = CurrentDb.OpenRecordset("SELECT ESTADO FROM Tabela1 WHERE LINHA = " & lContador)
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("Localidade").innertext = lCidade
IE.Document.all("UF").Value = lUF
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
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
Sou iniciante nesse mundo de programação e estou muito interessado na criação de automatizações de tarefas na WEB.
Pesquisando na Internet encontrei um exemplo muito bacana de como Inserir e Capturar dados de uma página WEB, porém o exemplo aplica-se somente ao Excel.
Estou tentando alterar o código para que eu possa usá-lo no Access.
Minha ideia aqui é basicamente: (1º) Extrair os dados da minha tabela, (2º) inserir na página web, (3º) Interagir com os controles da página, (4º) Pegar o resultado e devolver para a tabela... Simples assim.
Quando executo o código abaixo recebe um erro de tipos incompatíveis.
Peço o auxílio de vocês.
Segue o código:
'Inclui referência ao Microsoft Internet Controls
Sub lReferenciaIE()
Dim ObRef
On Error Resume Next
'Para Access
Access.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
'Para Excel
'ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub
Sub lsPesquisarCEPFaixa()
'Inclui a referência se não houver
lReferenciaIE
'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 dbs As DAO.Database
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/sis ... ixaCep.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
lCidade = CurrentDb.OpenRecordset("SELECT LOCALIDADE FROM Tabela1 WHERE LINHA = " & lContador & "")
lUF = CurrentDb.OpenRecordset("SELECT ESTADO FROM Tabela1 WHERE LINHA = " & lContador)
'Carrega os dados de cidade e UF na página e submente os dados do formulário
IE.Document.all("Localidade").innertext = lCidade
IE.Document.all("UF").Value = lUF
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
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
Editado pela última vez por Rafaeloneil em Seg Jun 25, 2018 5:04 pm, em um total de 1 vez.
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm
Re: Excel para Access - Integração com a Web
Boa Tarde,
O site não me deixa adicionar o banco de dados não sei o motivo.
Mas a informação tem tenho no acesso são somente 1 formulário simples, um rótulo que chama o código VBA e uma tabela para pegar os dados (imagem em anexo)
Será que ajuda?
O site não me deixa adicionar o banco de dados não sei o motivo.
Mas a informação tem tenho no acesso são somente 1 formulário simples, um rótulo que chama o código VBA e uma tabela para pegar os dados (imagem em anexo)
Será que ajuda?
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm
Re: Excel para Access - Integração com a Web
Segue estrutura da Tabela:
LINHA ESTADO LOCALIDADE FAIXA_CEP
1 AC Acrelândia
2 AC Assis Brasil
3 AC Brasiléia
4 AC Bujari
5 AC Capixaba
6 AC Cruzeiro do Sul
7 AC Epitaciolândia
8 AC Feijó
9 AC Jordão
LINHA ESTADO LOCALIDADE FAIXA_CEP
1 AC Acrelândia
2 AC Assis Brasil
3 AC Brasiléia
4 AC Bujari
5 AC Capixaba
6 AC Cruzeiro do Sul
7 AC Epitaciolândia
8 AC Feijó
9 AC Jordão
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm
Re: Excel para Access - Integração com a Web
Boa Noite,
Anexei o arquivo conforme o solicitado.
Anexei o arquivo conforme o solicitado.
- Anexos
-
- AccessToWebPage.rar
- (21.08 KiB) Baixado 279 vezes
Re: Excel para Access - Integração com a Web
Colega,
Comece consertando a parte que obtem dados do access. Esta linha:
Esta conceitualmente errada. Depois disso resolvido, voltamos a falar de acesso web, que eh o objetivo do topico.
Comece consertando a parte que obtem dados do access. Esta linha:
Código: Selecionar todos
lCidade = CurrentDb.OpenRecordset("SELECT LOCALIDADE FROM Tabela1 WHERE LINHA = " & lContador & "")
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm
Re: Excel para Access - Integração com a Web
Boa Tarde,
Primeiramente peço desculpas pelo erro conceitual no código, sou iniciante em programação.
Consertei a linha em questão alocando primeiramente os dados em um Recordset e atribuindo na sequencia o resultado as variáveis:
Consegui avançar com a execução do código!
Agora o que preciso é entender como encaixar um loop para fazer o mesmo processo para todas linhas da minha tabela.
Segue abaixo código alterado:
Sub lsPesquisarCEPFaixa()
Dim IE As InternetExplorer
Dim lCidade As String
Dim lUF As String
Dim dbs As DAO.Database
Dim rsUF As DAO.Recordset
Dim rsCID As DAO.Recordset
Dim strSQL As String
Dim v As Variant
Set IE = New InternetExplorer
IE.Visible = True
IE.Navigate "http://www.buscacep.correios.com.br/sis ... ixaCep.cfm"
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
Set rsUF = CurrentDb.OpenRecordset("SELECT ESTADO FROM Tabela1 WHERE LINHA = 4")
Set rsCID = CurrentDb.OpenRecordset("SELECT LOCALIDADE FROM Tabela1 WHERE LINHA = 4")
lUF = rsUF!ESTADO
lCidade = rsCID!LOCALIDADE
IE.Document.All("Localidade").innertext = lCidade
IE.Document.All("UF").Value = lUF
IE.Document.Forms("Geral").submit
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
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
CurrentDb.Execute "UPDATE Tabela1 SET FAIXA_CEP = '" & l.getElementsByTagName("td")(1).innertext & "' WHERE LINHA = 4"
End If
Next l
End If
Next i
MsgBox "Concluído!"
End Sub
Primeiramente peço desculpas pelo erro conceitual no código, sou iniciante em programação.
Consertei a linha em questão alocando primeiramente os dados em um Recordset e atribuindo na sequencia o resultado as variáveis:
Consegui avançar com a execução do código!
Agora o que preciso é entender como encaixar um loop para fazer o mesmo processo para todas linhas da minha tabela.
Segue abaixo código alterado:
Sub lsPesquisarCEPFaixa()
Dim IE As InternetExplorer
Dim lCidade As String
Dim lUF As String
Dim dbs As DAO.Database
Dim rsUF As DAO.Recordset
Dim rsCID As DAO.Recordset
Dim strSQL As String
Dim v As Variant
Set IE = New InternetExplorer
IE.Visible = True
IE.Navigate "http://www.buscacep.correios.com.br/sis ... ixaCep.cfm"
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
Set rsUF = CurrentDb.OpenRecordset("SELECT ESTADO FROM Tabela1 WHERE LINHA = 4")
Set rsCID = CurrentDb.OpenRecordset("SELECT LOCALIDADE FROM Tabela1 WHERE LINHA = 4")
lUF = rsUF!ESTADO
lCidade = rsCID!LOCALIDADE
IE.Document.All("Localidade").innertext = lCidade
IE.Document.All("UF").Value = lUF
IE.Document.Forms("Geral").submit
While IE.ReadyState <> READYSTATE_COMPLETE
Wend
sng = Timer
Do While sng + 3 > Timer
Loop
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
CurrentDb.Execute "UPDATE Tabela1 SET FAIXA_CEP = '" & l.getElementsByTagName("td")(1).innertext & "' WHERE LINHA = 4"
End If
Next l
End If
Next i
MsgBox "Concluído!"
End Sub
Re: Excel para Access - Integração com a Web
Rafael, seguinte:
strQuery = "SELECT QUE VOLTA VÁRIOS RESULTADOS"
Set rs = dbs.OpenRecordset(strQuery)
Do While Not rs.EOF
'Aqui você está dentro de uma linha por vez, e o que vc precisa estará dentro do objeto 'rs'
rs.MoveNext
Loop
Veja se esse código te ajuda, desculpe se não for isso.
strQuery = "SELECT QUE VOLTA VÁRIOS RESULTADOS"
Set rs = dbs.OpenRecordset(strQuery)
Do While Not rs.EOF
'Aqui você está dentro de uma linha por vez, e o que vc precisa estará dentro do objeto 'rs'
rs.MoveNext
Loop
Veja se esse código te ajuda, desculpe se não for isso.
-
- Acabou de chegar
- Mensagens: 6
- Registrado em: Qui Set 17, 2015 1:37 pm