Logo Hardware.com.br
Luiscrj
Luiscrj Novo Membro Registrado
3 Mensagens 0 Curtidas

[Resolvido] Como copiar dados de uma instância do IE para o Excel - VBA

#1 Por Luiscrj 27/02/2015 - 12:48
Prezados, bom dia.

Hoje é meu primeiro dia no fórum, sou iniciante aqui e também em VBA.

Criei um Dashboard para atualizar dados automaticamente a cada minuto de um CRM corporativo da empresa onde trabalho que é disponibilizado pela web.

Como meu TI não conseguiu me disponibilizar o acesso diretamente pelo banco, eu fiz com que o a rotina se conectasse ao site a cada minuto e baixasse os dados da página que contém o relatório que preciso, usando o :

With ActiveSheet.QueryTables(Connection:= _
"URL;http:

O problema, é que antes de iniciar a rotina, preciso entrar no site uma vez para logar. Quando já estou logado a rotina funciona normalmente, até o momento em que o login expira pelo timeout de um dia.
Ou seja, todo dia preciso iniciar a macro manualmente pois ela sempre trava. Além do time out, problemas de queda da internet também tenho o problema do gerenciador de conexões ficar cheio, com 20.000 conexões o que também o torna lento.

Para Resolver, comecei a implementar um código que parece funcionar, abrindo uma instancia do Internet explorer e passando direto o login e senha pela propria macro. O que eu ainda não consegui é copiar os dados da página inteira diretamente pela a planilha. Só para reforçar, não gostaria de analisar uma tabela específica na página para copiar e sim a página inteira. Segue abaixo o código criado até o momento:


Sub LoginViaBrowser()

Dim Dc_Usuario, Dc_Senha, Dc_URL, Dc_URL2 As String
Dim objIE As New InternetExplorer

'Referencia "Microsoft Internet Controls" Habilitada

'Abre o IE
objIE.Visible = True


'Define os dados de acesso e link das páginas de login e logout
Dc_Usuario = "xxx"
Dc_Senha = "9999"
Dc_URL = "http://xxx"
Dc_URL2 = "http://xxx"

'Navega até o link informado
objIE.Navigate2 Dc_URL

'Espera até que o IE carregue a pagina inicial do CRM por completo
Do Until objIE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

'Preenche usuário e senha do CRM
objIE.Document.all("user_name").innerText = Dc_Usuario
objIE.Document.all("user_password").innerText = Dc_Senha

'Clica em Entrar
objIE.Document.all("submitButton").Click

'Espera até que o IE carregue a pagina do relatorio do CRM por completo
Do Until objIE.ReadyState = READYSTATE_COMPLETE
DoEvents
Loop

'Neste trecho deve entrar o código para copiar toda a página do IE para para a plan1

'Executa o logout - Necessário para que a rotina de login não trave no proximo loop
objIE.Navigate2 Dc_URL2



'Fecha o IE
ie.Quit


End Sub

Estou procurando solução para este ja faz uma semana, até agora não cheguei a uma resposta conclusiva. Desde já agradeço a contribuição de todos.

Att,
Shura16
Shura16 Ubbergeek Registrado
2.5K Mensagens 601 Curtidas
#2 Por Shura16
27/02/2015 - 15:48
Também não sou conhecedor de VBA, mas o que eu diria para você fazer é tentar usar a funcionalidade de Importar Dados Externos do Excel, mas ele somente copia de uma determinada tabela. Gravaria um Macro e verificar o código gerado para usar no seu Script.

Mas que tipos de dados que não são gerados em tabelas que você deseja importar?

O próprio Excel também poderia importar dados diretamente do Banco de Dados, mas você deve ter o endereço do mesmo.
Você está na mesma rede ou está acessando externamente. Se estiver na mesma rede é mais fácil, só informar o IP direto, senão eles podem configurar um NO-IP por exemplo.
Coragem não é ausência de medo e sim o controle dele.

Linux em casa!
Windows 10, na empresa!
Agora: Android no bolso!
Luiscrj
Luiscrj Novo Membro Registrado
3 Mensagens 0 Curtidas
#4 Por Luiscrj
27/02/2015 - 18:56
Shura16 disse:
Também não sou conhecedor de VBA, mas o que eu diria para você fazer é tentar usar a funcionalidade de Importar Dados Externos do Excel, mas ele somente copia de uma determinada tabela. Gravaria um Macro e verificar o código gerado para usar no seu Script.

Mas que tipos de dados que não são gerados em tabelas que você deseja importar?

O próprio Excel também poderia importar dados diretamente do Banco de Dados, mas você deve ter o endereço do mesmo.
Você está na mesma rede ou está acessando externamente. Se estiver na mesma rede é mais fácil, só informar o IP direto, senão eles podem configurar um NO-IP por exemplo.


O problema em importar dados externos é que a página que acessa requer login e senha para acesso. Quando ela dá o timeout ele desloga e a macro não consegue mais acessar a página. Por isso minha necessidade de passar os dados de usuário e senha antes de acessar a pagina na rotina.

Em relação a conexão com o banco, ele não fica na mesma rede e o departamento responsável não conseguiu me liberar o acesso, visto que uso uma ferramenta de terceiros. Como pode ver, na rotina que executei acima consigo abrir uma instancia do internet, o que ainda falta é copiar estes dados para a planilha...
Luiscrj
Luiscrj Novo Membro Registrado
3 Mensagens 0 Curtidas
#5 Por Luiscrj
27/02/2015 - 19:03
Depoisteconto disse:
Se for só exibição, pode usar o controle Web Browser, veja o exemplo anexo.

At


Nunca trabalhei com javascript integrado ao vba, mas parece abrir um leque de possibilidade. No meu caso, eu tenho uma planilha principal que atualiza varios graficos a cada minuto, depois que minha rotina recupera os dados da web. Seria possivel usar esse template para alcançar esse objetivo?
Depoisteconto
Depoistecont... Geek Registrado
1.5K Mensagens 447 Curtidas
#6 Por Depoistecont...
02/03/2015 - 13:50
Luiscrj disse:
Nunca trabalhei com javascript integrado ao vba, mas parece abrir um leque de possibilidade. No meu caso, eu tenho uma planilha principal que atualiza varios graficos a cada minuto, depois que minha rotina recupera os dados da web. Seria possivel usar esse template para alcançar esse objetivo?


Não estamos falando de javascript, é um controle disponível nas bibliotecas mais recentes do office, pode aplicá-lo na folha de dados ou em um userform.

At
“O Estado não é uma ampliação do círculo familiar”, HOLANDA, Sérgio Buarque, Raízes do Brasil, 1936



flaviof2012gmail.com
flaviof2012g... Novo Membro Registrado
1 Mensagem 0 Curtidas
#7 Por flaviof2012g...
23/07/2015 - 12:22
Pessoa, bom dia!

Tb sou iniciante em VB e aqui no fórum.
Estou utilizando o mesmo código acima e consegui fazer o login no site e ir até a página que contém as informações que preciso copiar. A minha dúvida é na utilização do código activesheet.querytables.add
Não sei como utilizar. Já tentei adaptar alguns aqui da internet mas sempre vem em branco.... nenhum dado é copiado para o excel. Será que alguém pode me ajudar?
Desde já agradeço!
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal