12 Março 2011 • 4 min de leitura
Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2011/03/vba-internet-acessando-sites-da-web_12.html
Executando Scripts JavaScript
ie.Navigate "http://www.google.com.br"
ie.Document.parentwindow.execscript ("alert('Hellow World')")
A propriedade parentWindow obtêm uma referência ao objeto container da janela [1]. Podemos dizer que a propriedade parentWindow retorna uma referência à janela (objeto Window) que contém o objeto Document [3]. Essa propriedade é suportada apenas no Internet Explorer [2].
Obtemos a propriedade parentWindow para podermos invocar o método responsável pela execução de Scripts - execScript [6].
O método execScript executa o script [4].
Este método pode ser útil se você quer usar um script escrito em outra linguagem de script além de JavaScript [5]. Este método suporta linguagens de script tais como JavaScript, JScript, VBS e VBScript [5].
Abaixo, segue um exemplo de uso deste método com VBScript:
ie.Document.parentwindow.execScript "msgbox("""")", "VBScript"
Linguagens de script diferentes de JavaScript devem ser especificadas no segunda parâmetro do método execScript, como no exemplo acima.
Por que executar javascript? Suponha que você tem um site onde exista uma validação de dados. Você pode submeter os dados do formulário diretamente, ao invés de clicar no botão "Gravar". Assim você consegue "furar" a validação de dados existente no site, por exemplo.
ie.Document.parentwindow.execScript ("metodo_gravar()")
No código abaixo, desabilitamos a caixa de texto de pesquisa na página do Google, e mudamos o texto do botão "Pesquisar" para "É nois".
'Disabilita a caixa de texto de pesquisa
ie.Document.parentwindow.execScript ("document.forms[0].q.disabled=true")
'Muda o texto do botão de "Pesquisa Google"
ie.Document.parentwindow.execScript _
("document.getElementById('gbqfsa').innerText='É nois'")
Nota: Todos esses comandos de mudar as características da página tem efeito apenas no seu navegador. Eles não afetam o servidor da página. Se você atualizar a página (F5) verá que as mudanças feitas através do método execScript desaparecerão.
Abaixo alguns códigos para tratar o carregamento de página:
Busy: é uma propriedade que retorna um valor Booleano (True ou False) que indica se o objeto (no nosso caso o Internet Explorer) está ocupado em uma operação de navegação (carregando uma página) ou Download [7].
Do Until ie.Document.readyState = "complete"
A propriedade readyState retorna o status do documento (objeto Document) atual [8].
Os possíveis valores de retorno da propriedade readyState são [9]:
"uninitialized": O documento não foi inicializado ainda;
"loading": O documento está carregando;
"loaded": O documento terminou de carregar;
"interactive": O usuário pode interagir com o documento mesmo que não esteja totalmente carregado;
"complete": O documento está totalmente carregado.
Semelhante ao Código 2, mas aqui estamos usando valores enumerados do enumerador "tagREADYSTATE".
Qual a diferença entre ie.Busy e ie.document.readyState?
Em alguns momentos o objeto InternetExplorer sinalizará que o Navegador não está mais ocupado (ie.Busy retorna False), mas pode acontecer de uma parte do documento ou de um frame não estar totalmente carregado. Para estes casos, o melhor é utilizar o Código 2 e 3 mencionados acima.
Mudando a Barra de Status
ie.StatusBar = "Mudei a barra de status!"
A propriedade StatusBar retorna o objeto StatusBar [11].
O método Quit fecha o objeto [12] (no exemplo em questão, o objeto é o navegador do Internet Explorer).
parentWindow property (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms534331(v=vs.85).aspx, acessado em 10.03.2013;
parentWindow property (document): http://help.dottoro.com/ljemhvhd.php, acessado em 10.03.2013;
Zakas, Nicholas C. Professional JavaScript for Web Developers, 2nd Edition. Indianapolis, IN (USA). Wilei Publishing Inc, 2009;
execScript method (Internet Explorer): http://msdn.microsoft.com/en-us/library/ie/ms536420(v=vs.85).aspx, acessado em 10.03.2013;
execScript method (window): http://help.dottoro.com/ljoswolk.php, acessado em 10.03.2013;
window object (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms535873(v=vs.85).aspx, acessado em 10.03.2013;
Busy property: http://msdn.microsoft.com/en-us/library/aa752050(v=vs.85).aspx, acessado em 09.03.2013;
Document readyState Property: http://www.w3schools.com/jsref/prop_doc_readystate.asp, acessado em 10.03.2013;
readyState property (Internet Explorer): http://msdn.microsoft.com/pt-br/library/ie/ms534359(v=vs.85).aspx, acessado em 10.03.2013;
tagREADYSTATE values: http://msdn.microsoft.com/en-us/library/aa750671.aspx, acessado em 10.03.2013;
window.statusbar: https://developer.mozilla.org/en-US/docs/DOM/window.statusbar, acessado em 10.03.2013;
Quit Method: http://msdn.microsoft.com/pt-br/library/aa752097(v=vs.85).aspx, acessado em 10.03.2013.
Como compactar e restaurar um banco de dados do Microsoft Access usando VBA
Hoje, eu escrevo sobre como executar o recurso de compactar e restaurar banco de dados do Microsoft Access usando VBA no Microsoft Excel.