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

Marcar radion button no IE com VBA - Erro 424

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
AlonsoLima
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Seg Ago 17, 2020 12:23 pm

Marcar radion button no IE com VBA - Erro 424

Mensagem por AlonsoLima »

Marcar radion button no IE com VBA - Erro 424

Galera, bom dia.

Estou tentando marcar um rádio button no IE com VBA, mas dá o erro em tempo de execução 424 - O objeto é obrigatório.

Esta é a página: "http://www.gnre.pe.gov.br/gnre/v/guia/index"

Alguém pode me dar uma força, por favor?

O objetivo é marcar o radio button e fazer com que a página abra o próximo passo, como se o preenchimento fosse manual.

Segue meu código VBA:

Código: Selecionar todos

Sub emiteGNRE()

    Dim Ie As Object
    Dim iURL As String
    
    iURL = "http://www.gnre.pe.gov.br/gnre/v/guia/index"
    
    Set Ie = CreateObject("InternetExplorer.Application")
    Ie.Visible = True
    
    Ie.Navigate iURL
    
    While Ie.ReadyState <> READYSTATE_COMPLETE
    Wend
            
    Application.Wait Now + TimeValue("00:00:03")
    
    Ie.Document.getElementById("ufFavorecida").Value = "RN"
    Ie.Document.forms("form").submit
    
    While Ie.ReadyState <> READYSTATE_COMPLETE
    Wend
    
    Application.Wait Now + TimeValue("00:00:03")
    
    'Aqui o erro acontece
    Ie.Document.getElementById("optGnreSimples").Checked = True
    
    'Formas já tentadas:
    'Ie.Document.getElementById("optGnreSimples").SelectedItem = 1
    'Ie.Document.getElementById("optGnreSimples").Item(0).Checked = True
    'Ie.Document.getElementById("optGnreSimples").Item(1).Checked = True

    Set Ie = Nothing

End Sub
Segue o código HTML da página:

Código: Selecionar todos

<form action="" method="post" id="form">
	<input type="hidden" name="gnre.versao" value="2.00">
	<input type="hidden" name="gnre.dadosGnre" value="DadosGnre_v2_00">
	<input type="hidden" name="gnre.dadosGnre.ufFavorecida" id="hdUfFavorecida" value="RN">
	<fieldset id="fsTipoGnre" style="">
		<legend>Selecione o tipo de GNRE</legend>
		<div>
			<span title="Esta GNRE ..." class="tooltip">
				<!-- Abaixo o elemento que preciso marcar: -->
				<input type="radio" name="gnre.dadosGnre.tipoGnre" id="optGnreSimples" value="0"><span>GNRE Simples</span>
			</span>
		</div>
	</fieldset>
	<div "..."</div>
	<div "..."</div>
	<div "...">
		<input "...">
		<input "...">
		<input "...">
	</div>
</form>


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.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Marcar radion button no IE com VBA - Erro 424

Mensagem por Raygsson »

Usando o .Click deu certo:

Código: Selecionar todos

Sub emiteGNRE()
    Dim Ie As Object
    Dim iURL As String
    
    iURL = "http://www.gnre.pe.gov.br/gnre/v/guia/index"
    
    Set Ie = CreateObject("InternetExplorer.Application")
    Ie.Visible = True
    
    Ie.Navigate iURL
    
    While Ie.Busy Or Ie.ReadyState <> 4
        DoEvents
    Wend
       
    Ie.Document.getElementById("ufFavorecida").Value = "RN"
    Ie.Document.forms("form").submit
    
    While Ie.Busy Or Ie.ReadyState <> 4
        DoEvents
    Wend

    Ie.Document.getElementById("optGnreSimples").Click
    
    Stop
    
    Set Ie = Nothing

End Sub



AlonsoLima
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Seg Ago 17, 2020 12:23 pm

Re: Marcar radion button no IE com VBA - Erro 424

Mensagem por AlonsoLima »

Raygsson,

Deu muito certo!!!
Muito obrigado!

Porém, não entendi o que significaria a instrução "Ie.ReadyState <> 4". Por que diferente de 4?
Outra coisa, por que o uso da instrução "Stop"?
Você faria a gentileza de explicar, por favor?

Percebi que com o uso do "DoEvents" não foi necessário usar "Application.Wait". Vou estudar sobre o assunto.


Raygsson
Manda bem
Manda bem
Mensagens: 118
Registrado em: Sex Jan 31, 2020 8:06 pm

Re: Marcar radion button no IE com VBA - Erro 424

Mensagem por Raygsson »

o "stop" coloquei apenas no teste pra parar a macro quando chegar nesse ponto e verificar se tinha marcado a opção na página, pode tirar.
"Ie.ReadyState <> 4" o código 4 representa o estado de completamente carregado , entao a macro espera enquanto a página estiver diferente disso.
"DoEvents" permite que voce tenha controle de processos simultâneos, normalmente usado em Loops longos, Formularios, Carregamento de páginas, etc.. com ele é possivel interromper facilmente algum processo em execução, evita travamento total do Excel.


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.


AlonsoLima
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Seg Ago 17, 2020 12:23 pm

Re: Marcar radion button no IE com VBA - Erro 424

Mensagem por AlonsoLima »

Bom dia.

Ok.

Mais uma vez, obrigado.


AlonsoLima
Acabou de chegar
Acabou de chegar
Mensagens: 4
Registrado em: Seg Ago 17, 2020 12:23 pm

Re: Marcar radion button no IE com VBA - Erro 424

Mensagem por AlonsoLima »

Galera, voltando aqui porque tive outro problema com o mesmo elemento.

Se eu ponho um ponto de interrupção em Ie.Document.forms("form").submit, o clique funciona em Ie.Document.getElementById("optGnreSimples").Click.

Mas se eu deixar a execução seguir sem interrupção, o clique não funciona e dá o erro 424.

Já tentei pausar a execução usando Application.Wait, inclusive por 10 segundos, mas não funciona.
Tentei também colocar o ponto de interrupção no comando do clique e aguardar a página carregar manualmente, mas também não funciona.

Ou seja, só funciona se eu colocar o ponto de interrupção antes do Ie.ReadyState <> 4 que precede o clique.

Alguém pode dar uma força, por favor?

Código: Selecionar todos

Sub emiteGNRE()

    Dim Ie As Object
    Dim iURL As String
    
    iURL = "http://www.gnre.pe.gov.br/gnre/v/guia/index"
    
    Set Ie = CreateObject("InternetExplorer.Application")
    Ie.Visible = True
    
    Ie.Navigate iURL

    While Ie.Busy Or Ie.ReadyState <> 4
        DoEvents
    Wend
    
    Ie.Document.getElementById("ufFavorecida").Value = "RN"
    
    'Quando eu ponho o ponto de interrupção aqui, a execução funciona normalmente.
    Ie.Document.forms("form").submit
    
    While Ie.Busy Or Ie.ReadyState <> 4
        DoEvents
    Wend
    
    'Application.Wait Now + TimeValue("00:00:10")

    'Aqui dá o erro 424, mesmo que eu ponha aqui o ponto de interrupção.
    Ie.Document.getElementById("optGnreSimples").Click
    
    Ie.Document.getElementById("optNaoInscrito").Click
    Ie.Document.getElementById("tipoCNPJ").Click
    
    Set Ie = Nothing

End Sub


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