Automatização do Internet Explorer (IE) usando VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on July 11, 2023

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:

vba selenium web automation

(Recebo uma comissão de afiliado do curso do Dan)

Navegar em uma Página da Web Com o VBA

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.

alt text
Saiba mais!

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.

vba selenium web automation

(Recebo uma comissão de afiliado do curso do Dan)

Depoimento de um dos alunos do Dan

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA