Como interagir com sites usando VBA e Internet Explorer - janelas de pop-up

Uma situação que pode ocorrer com aqueles que usam VBA + Internet é você ter que lidar com janelas pop-ups. Seu código VBA clica em um link e ao invés de carregar a página na mesma janela, abre-se uma nova janela (pop-up).

Como interagir com sites usando VBA e Internet Explorer - janelas de pop-up
Este post foi originalmente publicado em  http://officevbavsto.blogspot.com/2011/05/vba-internet-pegando-instancia-de.html

Uma situação que pode ocorrer com aqueles que usam VBA + Internet é você ter que lidar com janelas pop-ups. Seu código VBA clica em um link e ao invés de carregar a página na mesma janela, abre-se uma nova janela (pop-up).

Vejam o seguinte código:

Function AbrirPagina()
  
    Dim ie As New InternetExplorer
    
    ie.Navigate "http://www.w3schools.com/"

    ie.Visible = True
   
    While ie.Busy

    Wend

    ie.Document.All.Item("as_q").innerText = "Qualquer coisa"

    ie.Document.All.Item("searchform").Submit
    
End Function

Acontecerá o seguinte:

Como trabalhar com o pop-up do Google que foi aberto?

Para resolver este problema vamos utilizar a classe ShellWindows.

A classe ShellWindows representa a coleção de todas janelas abertas. Esta coleção contém referencias às janelas do Internet Explorer.

Antes, você precisa adicionar referência ao Microsoft Internet Controls.

Vamos ao código da solução:

Function AbrirPagina()
  
    Dim ie As New InternetExplorer   

    ie.Navigate "http://www.w3schools.com/"

    ie.Visible = True   

    While Not ie.ReadyState = READYSTATE_COMPLETE

    Wend

    ie.Document.all.Item("as_q").innerText = "Qualquer coisa"

    ie.Document.all.Item("searchform").Submit
 
    Application.Wait Now + TimeValue("00:00:05")    

    Dim objShellWindows As New SHDocVw.ShellWindows

    i_URL = "http://www.google.com/search?sitesearch=www.w3schools.com&as_q=Qualquer+coisa"

    On Error Resume Next

    For Each ie In objShellWindows

        If TypeName(ie.Document) = "HTMLDocument" Then

            If ie.Document.URL = i_URL Then

                ie.Document.all.Item("q").innerText = "Teste"

            End If

        End If

    Next
    
End Function
  • i_URL tem que ser o endereço que aparece na Barra de Endereço da Janela Pop-up. Claro que no if você pode usar outra condição de comparação além da que usei neste exemplo.

Fonte: http://support.microsoft.com/kb/176792

Créditos

Photo by JÉSHOOTS from Pexels

comments powered by Disqus

Read more