Automatização do Internet Explorer (IE) usando VBA
In this Article
Esta página contém exemplos de codificação para automatizar o Internet Explorer (IE) usando o VBA.
** Atualização em 07/06/2019: Atualmente, a melhor maneira de obter automação da Web com o VBA é usando o Selenium. Este artigo NÃO aborda o Selenium. Os exemplos abaixo funcionarão e podem ser suficientes para suas necessidades. No entanto, se você tiver necessidades mais avançadas ou quiser se tornar um especialista em automação da Web, recomendo enfaticamente o uso do Selenium. O curso de Dan Strong sobre automação da Web (desconto disponível por meio deste link) é um recurso fantástico para aprender Selenium:
O primeiro trecho de código abre o IE e navega até um site. O segundo trecho de código abre o IE, navega até um site e interage com uma caixa de entrada.
Sub Automatizar_IE_Carregar_Pagina()
'Isso carregará uma página da Web no IE
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
'Criar objeto do InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
'Defina IE.Visible = True para tornar o IE visível ou False para que o IE seja executado em segundo plano
IE.Visible = True
'Definir URL
URL = "https://www.automateexcel.com/excel/"
'Navegar até o URL
IE.Navigate URL
' A barra de status permite que o usuário saiba que o site está sendo carregado
Application.StatusBar = URL & " está carregando. Por favor, aguarde..."
' Aguarde enquanto o IE está carregando...
'IE ReadyState = 4 significa que a página da Web foi carregada
'(o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)
Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
'Webpage carregada
Application.StatusBar = URL & " Carregada"
'Descarregar o IE
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
Um problema muito comum que as pessoas encontram ao trabalhar com o IE no VBA é a tentativa do VBA de executar o código antes que o Internet Explorer tenha sido totalmente carregado. Ao usar esse código, você diz ao VBA para repetir um loop até que o IE esteja pronto (IE.ReadyState – 4).
' Aguarde enquanto o IE está carregando...
'IE ReadyState = 4 significa que a página da Web foi carregada
'(o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)
Do While IE.ReadyState = 4: DoEvents: Loop 'Do While
Do Until IE.ReadyState = 4: DoEvents: Loop 'Do Until
Além disso, observe esta linha de código:
IE.Visible = TRUE
Esse código alterna se o IE é executado em segundo plano ou em primeiro plano.
Codificação VBA facilitada
Pare de procurar códigos VBA on-line. Use o Code VBA Add-in para inserir rapidamente o código desejado no Visual Basic Editor.
Abrir URL e Inserir Dados no Formulário Usando VBA
'Isso deve ser colocado na parte superior do seu módulo. É usado para definir o IE como a janela ativa
#If Win64 = 1 And VBA7 = 1 Then
Private Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
#Else
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
#End If
Sub Automatizar_IE_Entrar_Dados()
'Isso carregará uma página da Web no IE
Dim i As Long
Dim URL As String
Dim IE As Object
Dim objElement As Object
Dim objCollection As Object
Dim HWNDSrc As Long
'Criar objeto do InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
'Defina IE.Visible = True para tornar o IE visível ou False para que o IE seja executado em segundo plano
IE.Visible = True
'Definir URL
URL = "https://www.automateexcel.com/vba"
'Navegue até a URL
IE.Navigate URL
' A barra de status permite que o usuário saiba que o site está sendo carregado
Application.StatusBar = URL & " está carregando. Por favor, aguarde..."
' Aguarde o carregamento do IE...
'IE ReadyState = 4 significa que a página da Web foi carregada
'(o primeiro loop é definido para evitar pular inadvertidamente o segundo loop)
Do While IE.ReadyState = 4: DoEvents: Loop
Do Until IE.ReadyState = 4: DoEvents: Loop
'Página da Web carregada
Application.StatusBar = URL & " Carregada"
'Obter a ID da janela do IE para que possamos defini-la como janela ativa
HWNDSrc = IE.HWND
'Definir o IE como janela ativa
SetForegroundWindow HWNDSrc
'Localizar e preencher a caixa de entrada
n = 0
For Each itm In IE.document.all
If itm = "[object HTMLInputElement]" Then
n = n + 1
If n = 3 Then
itm.Value = "orksheet"
itm.Focus 'Ativa a caixa de entrada (faz o cursor aparecer)
Application.SendKeys "{w}", True 'Simula um pressionamento de tecla "W". True diz ao VBA para esperar
'até que o pressionamento de tecla seja concluído antes de continuar,
'permitindo que o javascript na página seja executado e filtre a tabela
GoTo fimMacro
End If
End If
Next
'Descarregar o IE
fimMacro:
Set IE = Nothing
Set objElement = Nothing
Set objCollection = Nothing
End Sub
GetElement no IE Usando o VBA
Interagir com objetos no Internet Explorer muitas vezes pode ser um problema. Você precisa identificar com qual objeto específico trabalhar. No código acima, estamos procurando a terceira instância de “[object HTMLInputElement]” (um formulário de entrada). Em seguida, inserimos “orksheet” no formulário de entrada (itm.value = “orksheet”), movemos o cursor para o formulário de entrada (itm.focus) e digitamos “w”. Digitar “w” é necessário, nesse caso, para ativar o javascript usado para filtrar a tabela.
Há métodos mais diretos para selecionar objetos, mas esse método deve funcionar se tudo o mais falhar.
Para usar esses outros métodos, você deverá usar as seguintes opções:
IE.document.getelementbyid("ID").value = "value" 'Encontrar por ID
IE.document.getelementsbytagname("ID").value = "value" 'Encontrar por tag
IE.document.getelementsbyclassname("ID").value = "value" 'Encontrar por class
IE.document.getelementsbyname("ID").value = "value" 'Encontrar por nome
Você pode ter problemas ao usar esses métodos se houver mais de um elemento com o mesmo nome. Ao usar um loop (como no código de exemplo acima), você pode especificar qual instância do elemento usar.
Interagir com o IE Usando o VBA
No código acima, usamos o evento: Focus (itm.focus) para ativar o cursor no formulário.
Você pode encontrar mais exemplos de eventos, métodos e propriedades de objetos/elementos aqui: https://msdn.microsoft.com/en-us/library/ms535893(v=vs.85).aspx
Nem todos eles funcionarão com todos os objetos/elementos e pode haver um pouco de tentativa e erro ao interagir com objetos no IE.
SendKeys Para o Internet Explorer
Usamos o comando Sendkeys no código acima:
Application.SendKeys "{w}", True
Em geral, o Sendkeys deve ser o último recurso. Normalmente, você deve ser capaz de interagir com os objetos diretamente, mas, às vezes, é mais fácil usar o comando Sendkeys. O Sendkeys é basicamente o mesmo que digitar com o teclado. É necessário certificar-se de que as janelas e os objetos corretos estejam sendo selecionados antes de prosseguir. O Sendkeys também pode acionar eventos que são executados com base na interação do usuário na Web. No exemplo acima, usamos Sendkeys para ativar o filtro Javascript na tabela que usamos na página da Web.
Sendkeys tem duas entradas:
1. a tecla a ser digitada (geralmente cercada por {}… {enter}, {q}….)
2. Aguarde até que Sendkeys seja concluído antes de prosseguir com TRUE/FALSE. Em geral, é melhor definir essa opção como TRUE ao trabalhar com o Internet Explorer.
Executar o Internet Explorer em Segundo Plano
Para executar o Internet Explorer em segundo plano, você precisa fazer duas coisas:
1. Chamar a macro que contém o código do IE com Application.Run para que a macro seja executada em segundo plano enquanto você continua trabalhando:
Application.Run ("Automatizar_IE_Carregar_Pagina")
Observação: esse código pode interromper seu trabalho ou seu trabalho pode interferir no código. Por exemplo, se você usar SendKeys, Sendkeys poderá enviar um pressionamento de tecla para o aplicativo errado. Tenha muito cuidado com isso.
2. Ocultar o IE:
IE.Visible = False
Selenium e VBA
Se você achou este artigo útil, talvez queira dar uma olhada no curso de Dan Strong sobre automação da Web. Ele aborda como usar o Selenium com VBA.
Depoimento de um dos alunos do Dan