Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Interação VBA com Internet Explorer (dúvidas)

Perguntas e Repostas sobre os artigos, posts e arquivos que são postados no site
Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

rafami03 escreveu:Boa tarde pessoal.

Estou tentando entender HTML agora e estou com dificuldades.

Quero trocar o valor do combobox no site da bmf, via VBA.

(restante comentário)

Conseguem me ajudar?
Boa noite Rafami, tudo bem?

Cara, dei uma olhada no seu código e vi duas situações a serem acertada:^

- Primeiro, é necessário alterar o endereço do site.
De

Código: Selecionar todos

ie.Navigate "http://www.bmfbovespa.com.br/shared/iframe.aspx?altura=400&idioma=pt-br&url=http://www.bmfbovespa.com.br/pt-br/mercados/acoes/cotacoes/boletim-diario/BoletimDiario.asp"
Para

Código: Selecionar todos

ie.Navigate "http://www.bmfbovespa.com.br/pt-br/mercados/acoes/cotacoes/boletim-diario/BoletimDiario.asp"
Essa troca de endereço é necessário, pois o site da Bovespa utiliza um recurso de uma Tag chamada iFrame. Essa Tag permite abrir uma página dentro de uma área específica de outra, no caso, a página que estou indicando é aberta dentro da página que você estava tentando acessar.

- Segundo, é necessário a troca do próprio código para acessar as informações necessárias.
De

Código: Selecionar todos

With ie
.document.forms(3).getElementsByTagName("select")("cboData").Value = dia
End With
Para

Código: Selecionar todos

    Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
    Dim Element As Object ' HTMLButtonElement
    
    Set ElementCol = Nothing
    Set ElementCol = ie.Document.getElementsByTagName("SELECT")
    
    For Each Element In ElementCol
    
        If Element.Name = "cboData" Then
        
            For intCboSelect = 1 To Element.Options.Length - 1
            
                If VBA.CDate(Element.Item(intCboSelect).Value) = VBA.CDate(Plan1.Cells(2, 2).Value) Then
                
                    MsgBox Element.Item(intCboSelect).innerText
                
                End If
            
            Next
    
        End If
    
    Next Element
Dessa forma é possível realizar a alteração do combo, conforme desejado.

Abraços e bom final de semana!!!


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

Rodrigo_2015 escreveu:Boa noite!

Preciso de uma ajuda de vocês para fazer o input de uma informação no site dos correios;

(restante comentário)

Desde ja agradeço

Rodrigo
Fala Rodrigo, boa noite.

Cara, veja os códigos abaixo para conseguir realizar o que deseja.

1 - No site tem um listbox com as siglas estados. Alguem consegue me ajudar a digitar o estado via código vba?
Neste primeiro caso, como estamos falando de uma Tag Select do Html, é mais fácil gerar uma rotina que faça uma varredura item a item da seleção, realizando uma comparação dos valores.

Código: Selecionar todos

    Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
    Dim Element As Object ' HTMLButtonElement
    
    Set ElementCol = Nothing
    Set ElementCol = ie.Document.getElementsByTagName("SELECT")
    
    For Each Element In ElementCol
    
        If Element.Name = "UF" Then
        
            For intItem = 0 To Element.Options.Length - 1
            
                If VBA.CStr(Element.Item(intItem).Value) = VBA.CStr("MG") Then
                
                    Element.Item(intItem).Selected = True
                
                End If
            
            Next
    
        End If
    
    Next Element
2 - No site tem o botão Buscar, porém quando vou em exibir codigo fonte da pagina, não estou conseguindo achar o id deste botão. Alguem sabe informar como faço para clicar neste botão?
Nesse segundo caso, a Tag Button não possui nenhum Atributo Id ou Name, por esse motivo, me guiei pelo Atributo Type, conforme código abaixo.

Código: Selecionar todos

    Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
    Dim btnInput As Object ' MSHTML.HTMLInputElement

    Set ElementCol = Nothing
    Set ElementCol = ie.Document.getElementsByTagName("BUTTON")
    
    For Each btnInput In ElementCol
    
        If btnInput.Type = "submit" Then
        
            btnInput.Click
            Exit For
            
        End If
        
    Next btnInput
Espero que tenha ajudado.

Abraços e bom final de semana.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

romulocesar escreveu:Boa noite!!
Preciso clicar em um link para continuar avancando na pagina!!!
Não estou conseguindo fazer isso!!Só consigo clicar em botoes!!
Como faço??
Romulo, boa noite.

Então cara, para realizar o click de um link, não é muito diferente de um botão, precisa apenas direcionar as variáveis para o link. Veja um modelo abaixo:

Código: Selecionar todos

Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
Dim Link As Object ' MSHTML.HTMLAnchorElement

' click a text link on the page after that
Set ElementCol = appIE.Document.getElementsByTagName("a")
 
For Each Link In ElementCol
    If Link.innerHTML = TextoDoLink" Then
        Link.Click
        Exit For
    End If
Next Link
No lugar do Link.InnerHTML, pode se utilizado Link.Id, Link.Name ou qualquer outro Atributo Html que o link possuir, e realizar a comparação.

Espero ter dado uma orientação.

Abraços e bom final de semana.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

fmgomes escreveu:Pessoal. Boa noite.

Estou com um certo problema para inserir um número que tenho numa planilha em numa página da internet. Acontece que pelo objCollection(i).Value não é possível.

A questão é somente conseguir inserir o número do processo judicial via VBA na página http://www.tjrs.jus.br/busca/?tb=proc
O nome do objeto na página é: num_processo_mask

(restante comentário)

Att.
Bom dia FMGomes, tudo bem??

Cara, o problema da página que esta tentando acessar é o mesmo de alguns que não sabia resolver, mas descobri a pouco tempo, estudando HTML.

A questão é que esse endereço do TJRS utiliza uma Tag Html chamada iFrame. Essa Tag permite que seja carregada uma página Html dentro de outra página. No caso, quando você tente acessar o endereço http://www.tjrs.jus.br/busca/?tb=proc, não é aqui que o campo do número de processo esta, mas sim nesse outro endereço http://www.tjrs.jus.br/site_php/consulta/index.php.

Nesse caso, redirecionei o acesso do navegador para o novo endereço e fiz algumas alterações em seu código, pois esta utilizando a variável objCollection como referência, mas na verdade ele é uma base de consulta das Tags Input. O correto seria utilizar o objElement como referência, conforme novo código abaixo:

Código: Selecionar todos

Public Sub InserirNrProc()

    On Error Resume Next
    
    Dim IE As Object
    Dim objElement As Object
    Dim objCollection As Object
    
    Set IE = CreateObject("InternetExplorer.Application")

    IE.navigate "http://www.tjrs.jus.br/site_php/consulta/index.php"
    
    IE.Visible = True
    
    
    Do While IE.Busy
        Application.Wait DateAdd("s", 1, Now)
    Loop
    
    Set objCollection = IE.document.getElementsByTagName("input")
    
    
    For Each objElement In objCollection
    
        If objElement.Name = "num_processo_mask" Then
        
            objElement.innerText = 123456789
        
        End If
    
    Next objElement

End Sub
Qualquer dúvida, estamos a disposição.

Abraços e bom final de semana.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


romulocesar
Colaborador
Colaborador
Mensagens: 27
Registrado em: Qua Ago 19, 2015 11:25 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por romulocesar »

Mikel Silveira Fraga escreveu:
romulocesar escreveu:Boa noite!!
Preciso clicar em um link para continuar avancando na pagina!!!
Não estou conseguindo fazer isso!!Só consigo clicar em botoes!!
Como faço??
Romulo, boa noite.

Então cara, para realizar o click de um link, não é muito diferente de um botão, precisa apenas direcionar as variáveis para o link. Veja um modelo abaixo:

Código: Selecionar todos

Dim ElementCol As Object ' MSHTML.IHTMLElementCollection
Dim Link As Object ' MSHTML.HTMLAnchorElement

' click a text link on the page after that
Set ElementCol = appIE.Document.getElementsByTagName("a")
 
For Each Link In ElementCol
    If Link.innerHTML = TextoDoLink" Then
        Link.Click
        Exit For
    End If
Next Link
No lugar do Link.InnerHTML, pode se utilizado Link.Id, Link.Name ou qualquer outro Atributo Html que o link possuir, e realizar a comparação.

Espero ter dado uma orientação.

Abraços e bom final de semana.

Grande Mikel, mto obrigado pela atenção!! Mas infelizmente não entendi!! :(
Se vc pudesse usar um site simples como exemplo ajudaria mto!!Pq ai enxergaria o nome que tenho que colocar para acessar o link, que nem o botão.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

romulocesar escreveu:<A onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('homeForm'),{'homeForm:j_id102':'homeForm:j_id102'},'');}return false" href="#"><I class="fa fa-upload"></I>
<H4 class="opensans bold">Emitir NFS-e</H4></A></DIV>
Romulo, seria algo mais ou menos assim. Se você observar no código que você passou, existe dentro da Tag A (link) uma Tag H4, com o texto "Emitir NFS-e".

Nesse caso, apesar do texto estar dentro da Tag H4, ele também é o texto da Tag A e, nesse caso, poderia ser utilizado dessa forma:

Código: Selecionar todos

    If Link.innerHTML = "Emitir NFS-e" Then
Pelo menos estou analisando isso baseado em outros casos que precisei fazer essa ação. Como você esta utilizando um sistema da Prefeitura de sua cidade, não posso afirmar se vai funcionar corretamente. A indicação é para lhe dar opções para conseguir realizar os teste.

Na cidade onde trabalho, por exemplo, a Prefeitura disponibiliza um WebService para fazer esse tipo de emissão, já é uma tratativa totalmente diferente da interação entre VBA e Internet.

Espero ter ajudado. Abraços!!!!


eustaquiosena
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Sex Set 18, 2015 7:31 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por eustaquiosena »

Boa noite,

Estou querendo criar um script VBA, para executar a tarefa de captar o status do toner das impressoras graficamente ou em porcentagem.
Lembrando que as impressoras estão em rede.

Estou com essa planilha, não consegui implementar esse script em minha planilha.
Para eu analisar o nivel de toner das 20 impressoras que sou responsavel, sera preciso criar um user form e um botao?
Ou qual recurso exatamente eu poderia usar.
Conforme a planilha em anexo os dados serão exibidos pelo Range F4 a F24.
E no arquivo script_commands, encontra-se a linha de comando HTML da impressora.

Segue o link da planilha: http://1drv.ms/1OEBO07

Voces podem me ajudar?


romulocesar
Colaborador
Colaborador
Mensagens: 27
Registrado em: Qua Ago 19, 2015 11:25 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por romulocesar »

Mikel Silveira Fraga escreveu:
romulocesar escreveu:<A onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.getElementById('homeForm'),{'homeForm:j_id102':'homeForm:j_id102'},'');}return false" href="#"><I class="fa fa-upload"></I>
<H4 class="opensans bold">Emitir NFS-e</H4></A></DIV>
Romulo, seria algo mais ou menos assim. Se você observar no código que você passou, existe dentro da Tag A (link) uma Tag H4, com o texto "Emitir NFS-e".

Nesse caso, apesar do texto estar dentro da Tag H4, ele também é o texto da Tag A e, nesse caso, poderia ser utilizado dessa forma:

Código: Selecionar todos

    If Link.innerHTML = "Emitir NFS-e" Then
Pelo menos estou analisando isso baseado em outros casos que precisei fazer essa ação. Como você esta utilizando um sistema da Prefeitura de sua cidade, não posso afirmar se vai funcionar corretamente. A indicação é para lhe dar opções para conseguir realizar os teste.

Na cidade onde trabalho, por exemplo, a Prefeitura disponibiliza um WebService para fazer esse tipo de emissão, já é uma tratativa totalmente diferente da interação entre VBA e Internet.

Espero ter ajudado. Abraços!!!!

Meu amigo Mikel!!!
Entendi perfeitamente sua explicação, mas infelizmente não deu certo. Para facilitar as coisas e vc me passar um exemplo disso, vc pode criar uma macro que ao entrar no site http://iss.fortaleza.ce.gov.br clique no link "Emitir DAM Avulso"(no canto superior direito do site) e outra que clique no link "Validar NFSe"(no centro inferior da tela)

Muito obrigado mesmo por sua atenção em me ajudar!


eustaquiosena
Acabou de chegar
Acabou de chegar
Mensagens: 3
Registrado em: Sex Set 18, 2015 7:31 pm

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por eustaquiosena »

Prezados,

Estou com uma planilha, cujo nela estou implementando um script, que vai monitorar o nível de toner de cada impressora. sendo que cada impressora consigo acessa via web atraves de um IP.

Com esse script vou poder monitorar as 20 impressoras no qual sou responsável.

Conforme a planilha em anexo os dados serão exibidos pelo Range F4 a F24.

Abaixo segue o script que esta sendo criado, mas esta compilando com erros.

-----------------------------------
Erro de compilação
-----------------------------------
Link:http://1drv.ms/1MEWLIM
------------------------------------------------------

Option Explicit
Public Sub spuRetornarStatusToner()

Dim wbk As Excel.Workbook
Set wbk = Excel.ThisWorkbook

Dim wsh As Excel.Worksheet
Set wsh = wbk.Sheets("CONTROLE")

Dim nvgInternetExplorer As InternetExplorer
Dim objIeDoc As Object
Dim htmLinha As HTMLTableRow
Dim htmColuna As HTMLTableCol

Dim i As Integer

For i = 1 To 20

Set nvgInternetExplorer = New InternetExplorerMedium
nvgInternetExplorer.Navigate ("http://10.10.10.10")
nvgInternetExplorer.Visible = True

While nvgInternetExplorer.ReadyState <> 4
Wend

Set objIeDoc = nvgInternetExplorer.Document

For Each htmLinha In objIeDoc.all.tags("tr")
For Each htmColuna In htmLinha.all.tags("td")
If Left$(htmColuna.innerText, 16) = "Cartucho Preto ~" Then
MsgBox Right$(htmColuna.innerText, Len(htmColuna.innerText) - 16) ' para teste verificando se o valor está correto
wsh.Range("F" & 3 + i).Value = Right$(htmColuna.innerText, Len(htmColuna.innerText) - 16)
End If
Next htmColuna
Next htmLinha

nvgInternetExplorer.Quit

Next i

Set nvgInternetExplorer = Nothing
Set objIeDoc = Nothing
Close

End Sub

--------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------
Codigo fonte da paginar da web da impressora
-------------------------------------------------------

<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<meta HTTP-EQUIV="refresh" CONTENT="120; url=/cgi-bin/dynamic/printer/PrinterStatus.html">
<title>Printer Status</title>
<base target="_self">
<LINK REL="stylesheet" HREF="/cgi-bin/dynamic/printer/configStyle.css" TYPE="text/css">
</head>
<body>
<!-- Device Status Title-->

<h3>Status do dispositivo - <a href="/" TARGET="_top"><sub><b>Atualizar</b></sub></a></h3>




<!-- Job Parking -->


<hr class="status_hr"/>

<!-- Panel and Toner Level -->
<table class="status_table">
<tr>
<th colspan="4">&nbsp;</th>
</tr>



<!-- Toner Level -->

<tr>
<td colspan="4">
<B>Status do toner:</B>
</td>
</tr>


<TR><TD COLSPAN=4><B>Cartucho Preto ~100%</B></TD></TR><TR>
<TD width="25%">
<TABLE style="table-layout:fixed" borderColor=#000000 cellSpacing=0 width="100%" border=1><TBODY>
<TR>
<TD width="100%" bgColor=#000000>&nbsp;</TD><TD width="0%" bgColor=#ffffff>&nbsp;</TD></TR></TBODY></TABLE></TD><TD COLSPAN=3>&nbsp;</TD></TR>

</table>

<hr class="status_hr">
<table class="status_table">
<tr>
<th colspan="5">&nbsp;</th>
</tr>

<tr>
<td width="23%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Bandeja de entrada de papel:</B></P> </TD>
<td width="20%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Status:</B></P> </TD>
<td width="15%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Capacidade:</B></P></TD>
<td width="15%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Tamanho:</B></P></TD>
<td width="25%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Tipo:</B></TD>
</tr>

<TR>
<TD><P style="margin-left:5">Bandeja 1</P></TD>
<td width="30%"><P style="margin-left:5"><table width="50%" bgcolor="#009900" style="padding: .75pt" height="1"><tr><td><b>OK</b></TD></TR></TABLE></P></TD>
<TD><P style="margin-left:5">550</P></TD>
<TD><P style="margin-left:5">A4</P></TD>
<TD><P style="margin-left:5">Papel&nbsp;comum</P></TD>
</TR>
<TR>
<TD><P style="margin-left:5">Alimentador MF</P></TD>
<td width="30%"><P style="margin-left:5"><table width="50%" bgcolor="FFFFFF" style="padding: .75pt" height="1"><tr><td><b>OK</b></TD></TR></TABLE></P></TD>
<TD><P style="margin-left:5">100</P></TD>
<TD><P style="margin-left:5">A4</P></TD>
<TD><P style="margin-left:5">Tipo&nbsp;personalizado&nbsp;6</P></TD>
</TR>



</table>

<hr class="status_hr"/>

<table class="status_table">

<tr>
<td width="23%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Bandeja de saída de papel:</B></P></TD>
<td width="20%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Status:</B></P> </TD>
<td width="15%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B>Capacidade:</B></P></TD>
<td width="15%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B></B></P></TD>
<td width="25%"><P align="left" style="margin-top: 5; margin-bottom: 5"><B></B></P></TD>
</tr>
<TR>
<TD><P style="margin-left:5">Bandeja padrão</P></TD>
<td width="30%"><P style="margin-left:5"><table width="50%" bgcolor="#009900" style="padding: .75pt" height="1"><tr><td><b>OK</b></TD></TR></TABLE></P></TD>
<TD><P style="margin-left:5">250</P></TD>
<TD><P style="margin-left:5"></P></TD>
<TD><P style="margin-left:5"></P></TD>
</TR>

</table>

<hr class="status_hr">
<table class="status_table">
<tr>
<th colspan="2">&nbsp;</th>
</tr>
<TR>
<TD width="40%"><B>Tipo de dispositivo:</B></TD><TD width="60%">Laser monocromática</TD>
</TR><TR>
<TD><B>Velocidade:</B></TD><TD>Até 50 Páginas/minuto</TD>
</TR><TR>
<TD><B>Cartucho toner Capacidade:</B></TD><TD>Aproximadamente 7.500 páginas com 5% de cobertura</TD>
</TR><TR>
<TD><B>Kit manutenção Vida restante:</B></TD><TD>100%</TD>
</TR><TR>
<TD><B>Unid. imagem Vida restante:</B></TD><TD>87%</TD>
</TR>
</table>



</body>
</html>

----------------------------------------------------------------------------------------------------------------------------------------------------


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Interação VBA com Internet Explorer (dúvidas)

Mensagem por Mikel Silveira Fraga »

romulocesar escreveu:Meu amigo Mikel!!!
Entendi perfeitamente sua explicação, mas infelizmente não deu certo. Para facilitar as coisas e vc me passar um exemplo disso, vc pode criar uma macro que ao entrar no site http://iss.fortaleza.ce.gov.br clique no link "Emitir DAM Avulso"(no canto superior direito do site) e outra que clique no link "Validar NFSe"(no centro inferior da tela)
Muito obrigado mesmo por sua atenção em me ajudar!
Romulo, boa tarde.

Como solicitado, espero que o modelo de uma esclarecida na rotina que esta precisando montar.

Abraços e excelente semana.
Anexos
Acessando Links Site ISS Fortaleza.zip
Acesso Links do Site da Prefeitura de Fortaleza.
(15.5 KiB) Baixado 340 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder