Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2011/06/vba-internet-lidando-com-caixas-de.html

Uma das dificuldates que muitos programadores encontram ao interagir com sites usando VBA e Internet Explorer é como lidar com caixas de mensagens no navegador.

A classe do Internet Explorer não oferece nada para poder lidar com essas caixas de mensagens. A solução é recorrer às APIs do Windows.
Para o caso descrito acima teremos de utilizar duas APIs: SendMessage e FindWindow.

O FindWindow localiza a janela que você quer fechar e SendMessage envia o comando "fechar" para essa.

No começo do código declare as seguintes linhas:

Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
 
Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
 
Public Const WM_CLOSE = &H10

OK, agora você pode começar a usar as APIs.

A constante WM_CLOSE representa o comando "fechar". Você utilizará essa constante como parâmetro na chamada da API SendMessage.

E agora o código completo:

Sub AcessaPagina()  

    Dim winHwnd As Long

   '[...] Bloco de código que acessa a página, até o momento em que abre a mensagem

    winHwnd = FindWindow(vbNullString, "Mensagem da página da Web") 

    If winHwnd <> 0 Then

            SendMessage winHwnd, WM_CLOSE, 0&, 0&

    End If

End Sub
  • winHwnd é uma variável do tipo long que receberá um número inteiro que representará a janela que você está retornando pela API FindWindow. Importante notar que a API FindWindow busca a janela pelo texto do título da mesma. Essa mensagem varia de acordo com o site ou versão de navegador.
  • E por fim utilizamos a API SendMessage dizendo para ela fechar a janela encontrada. []'s  

Créditos

Photo by Caio from Pexels

Fontes

Leitura recomendada