WEBBROWSER - RUN-TIME ERROR 91

EVERTOOON 27/11/2010 12:22:30
#358324
bom dia a todos,

tenho um aplicativo que tenta manipular uma página da internet, através do controle WebBrowser. Contudo, em determinado momente, ocorre o um erro: Run-time Error 91 - Object variable ou With block variable not set.

Funciona assim: eu preciso alterar a seleção de um ComboBox da página, e o código é o seguinte:

[th][/th]
Código

Public Pagina as New HTMLDocument

Private Sub Form_Activate()
WebBrowser1.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]
Set Pagina = WebBrowser1.Document
End Sub

Private Sub Command1_Click()
If WebBrowser1.ReadyState = READYSTATE_COMPLETE Then

Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]00[Ô]

End If



na linha [ô] Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô] [ô] ocorre o erro.
Já pesquisei em muitos lugares, alguns falam de não ter setado corretamente o objeto, mas não sei o que possa estar ocorrendo. Preciso de ajuda.

Abraços!
MARCELO.TREZE 27/11/2010 12:29:10
#358325
Resposta escolhida
colega nesta linha

WebBrowser.ReadyState

não seria

WebBrowser[txt-color=#e80000]1[/txt-color].ReadyState

EVERTOOON 27/11/2010 12:31:25
#358326
Marcelo, é isso mesmo.
Foi um erro do tópico, e não da linha no programa!

já fiz a correção...

Obrigado!
MARCELO.TREZE 27/11/2010 12:34:21
#358327
tente o seguinte

Private Sub Command1_Click()
WebBrowser1.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]
Set Pagina = WebBrowser1.Document

If Pagina.ReadyState = READYSTATE_COMPLETE Then

Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]00[Ô]

End If

Set Pagina = Nothing
End Sub
EVERTOOON 27/11/2010 12:39:17
#358328
Marcelo, o erro continua.

Um detalhe que pude perceber:
Se eu executo o WebBrowser em uma página local, salva da internet, com a mesma estrutura HTML, ele gera o erro, mas quando eu re-executo no debug ele ignora e faz a seleção do ComboBox.
Agora, se eu tento re-executar no debug na página da internet, o erro persiste...
MARCELO.TREZE 27/11/2010 12:43:06
#358329
vamos tentar sómais uma coisinha

Private Sub Command1_Click()
Set Pagina = WebBrowser1
Pagina.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]

If Pagina.ReadyState = READYSTATE_COMPLETE Then

Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]00[Ô]

End If

Set Pagina = Nothing
End Sub
EVERTOOON 27/11/2010 13:22:01
#358332
Fiz o seguinte
 

Private Sub Command1_Click()
Dim Pagina As HTMLDocument
WebBrowser1.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]

Set Pagina = WebBrowser1.Document
Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]01[Ô]

Set Pagina = Nothing

End Sub



o erro parou, mas a alteração do ComboBox só é visível se eu der uma pausa no código, com um MsgBox

 

Private Sub Command1_Click()
Dim Pagina As HTMLDocument
WebBrowser1.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]

Set Pagina = WebBrowser1.Document

Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
MsgBox [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]01[Ô]
MsgBox [Ô][Ô]

Set Pagina = Nothing

End Sub


EVERTOOON 27/11/2010 13:48:28
#358334
Marcelo,

coloquei um evento Stop no WebBrowser antes de iniciar a manipulação, e deu certo:



Private Sub Command1_Click()
Dim Pagina As HTMLDocument
WebBrowser1.Navigate2 [Ô]http://www2.rio.rj.gov.br/smf/siam/darmiptu.asp[Ô]

Set Pagina = WebBrowser1.Document

WebBrowser1.Stop
Pagina.getElementById([Ô]ano[Ô]).children(1).setAttribute [Ô]Selected[Ô], [Ô]Selected[Ô], [Ô][Ô]
Pagina.getElementById([Ô]TDCentro[Ô]).innerText() = [Ô]01[Ô]

Set Pagina = Nothing

End Sub




Fiz pra uma outra página, e também deu certo. Só que nesta outra página, no código HTML dela, quando o ComboBox é alterado executa esse evento:


<select name=[Ô]tpPesquisa[Ô] onchange=[Ô]javascript:marcaCpfCnpj(this.value);[Ô] tabindex=[Ô]1[Ô]>


Queria saber se existe uma forma de chamar essa função em JavaScript pelo WebBrowser.

Grato!

TECLA 27/11/2010 15:33:04
#358337
Experimenta dá um PAUSE ao invés do MESSAGE.

Declarations
Private Declare Sub Sleep Lib [Ô]kernel32[Ô] (ByVal dwMilliseconds As Long)


Code
Sleep 300

EVERTOOON 27/11/2010 16:06:20
#358338
Tecla,

o evento Stop do controle WebBrowser funcionou perfeitamente.

Meu problema agora é fazer com que a função JavaScript seja executada, nesse evento da tag HTML:


<select name=[Ô]tpPesquisa[Ô] onchange=[Ô]javascript:marcaCpfCnpj(this.value);[Ô] tabindex=[Ô]1[Ô]>
Tópico encerrado , respostas não são mais permitidas