Arquivo da tag: Microsoft Internet Controls

VBA – Encontrando a referência ao Microsoft Internet Controls

Em alguns dos artigos do blog e citações no fórum são colocados exemplos de código VBA que possibilitam a interação com o Internet Explorer. Dentre as opções do que pode ser feito, temos:

  • Acessar uma página na internet e ler seu conteúdo
  • Acessar uma página na internet, preenchendo automaticamente alguns campos
  • Baixa um determinado conteúdo de uma página
  • Verificar se um determinado conteúdo consta em uma página

A lista pode crescer muito, mas a  intenção até então era contextualizar. O fato é que, para conseguir interagir com o objeto, é preciso ter a referência a biblioteca Microsoft Internet Controls no VBA. Ela expõem o objeto Internet Explorer e outros que não vem ao caso no momento.

No VBA das versões até a 2003 do Office com a intalação do Internet Explorer 6, essa referência era vista automaticamente na caixa de diálogo de referências do VBA. Porém, em instalações do IE7 e 8, isso não ocorre. A biblioteca não deixou de existir, porém, digamos que foi para “outro lugar”. Antes (até o IE6), a dll que representava os controles era a:

C:\Windows\System32\ieframe.dll

Para adicionar a referência manualmente ao novo componente, é preciso referenciar o arquivos que está no seguinte caminho:

C:\Windows\System32\shdocvw.dll

No VBA, vá em Ferramentas->Referências, clique em procurar e abra o arquivo do caminho acima. Com isso, a referência voltará a funcionar.

Referências:

http://bit.ly/bNCV3v

VBA – Interagindo com o objeto Internet Explorer

É, fazemos tanta coisa pela internet que fica difícil imagina um dia sem poder acessá-la. Teve até gente passando mal no dia do “Apagão da Internet” ocorrido a poucas semanas.

Bom, baboseiras a parte, surgindo de mais uma das necessidades bizarras que os sistemas nos propõem, precisei uma vez preencher um formulário web automaticamente com alguns dados que constavam em planilhas ou até mesmo em um BD no Access.

Pois bem, já tinha feito algumas brincareiras com o objeto InternetExplorer referenciado através do VBA, mas até atenção se resumia a abertura e navegação para uma determinada página. Felizmente foi fácil manipular o código HTML dentro do objeto de tal forma que fosse possível o preenchimento dos campos e por fim submeter a página.

Para facilitar a apresentação de um exemplo, colocarei um código que faz autenticação na página do meu fórum, o Fórum Tomás Vásquez.

O código abre uma instância do Internet Explorer, navega até a página de Login, preenche os campos conforme valores informados em objetos InputBox e submete a página.

Sub x()
    Dim ie As InternetExplorer
    Dim C
    Dim ULogin As Boolean, ieForm
    Dim MyPass As String, MyLogin As String
redo:
    MyLogin = Application.InputBox("Por Favor entre com o Login", "Forum Tomás Vásquez", Default:="login", Type:=2)
    MyPass = Application.InputBox("Por favor entre com a senha", "Forum Tomás Vásquez", Default:="Password", Type:=2)
    If MyLogin = "" Or MyPass = "" Then GoTo redo
    Set ie = New InternetExplorer
    ie.Visible = True
    ie.Navigate "http://www.tomasvasquez.com.br/forum/ucp.php?mode=login"
 
    Do Until ie.ReadyState = READYSTATE_COMPLETE
    Loop
 
    ie.Document.all("username").innerText = MyLogin
    ie.Document.all("password").innerText = MyPass
    'obtém o forma a qual o controle de login pertence para submetê-lo
    ie.Document.all("username").form.all("login").Click
 
    If ULogin = False Then MsgBox "Usuário logado"
    Set ie = Nothing
End Sub

Importante: É bom lembrar que para que o código funcione como está, é preciso adicionar um referência ao Microsoft Internet Controls.

Para auxiliar, a seguinte função adiciona automaticamente a referência necessária:

Sub Referencia()
    Dim ObRef
    On Error Resume Next
    ' Adiciona Controles da Net
    ThisWorkbook.VBProject.References.AddFromGuid "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 1, 1
End Sub

Download da planilha

VBA.IE.Login.xlsm.zip
Bom proveito!