É, 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!