VBA interação com I...
 
Notifications
Clear all

VBA interação com Internet Explorer 9 - Erro Frames

7 Posts
2 Usuários
0 Reactions
2,453 Visualizações
(@milenamoreno)
Posts: 51
Trusted Member
Topic starter
 

Ilustres, bom dia!

Tenho uma macro no Excel 2010 que funcionava perfeitamente no IE 8, porém ontem quando
migrei para IE 9 passou a dar a seguinte mensagem: " O método 'frames'
do objeto 'JScriptTypeInfo' falhou. Na rotina, que reproduzo abaixo, dá erro em todas as linhas que há o objeto "Frames".
Alguém saberia o motivo p/ me ajudar?

A macro que menciono é a seguinte:

Sub AcessaPagina()
Dim ie As InternetExplorer
Set ie = New InternetExplorer
ie.Navigate
"http://www.bmfbovespa.com.br/Cias-Listadas/Empresas-Listadas/ResumoEmpresaPrinc
ipal.aspx?codigoCvm=20800&idioma=pt-br "
ie.Visible = True
'Essa daqui é novidade. Faz loop até que a página seja totalmente
carregada e assim você não tem um erro em tempo de execução
'quando executar todo o código

Do While ie.Busy
Loop

Do Until ie.Document.ReadyState = "complete"
Loop

' Nesta parte está dando erro;
Do Until
ie.Document.frames("ctl00_contentPlaceHolderConteudo_iframeCarregadorPaginaExter
na").Document.ReadyState
= "complete"
Loop

'Quando retiro a parte de cima, aparece o erro nesta parte
Dim objTABLE As Object
Set objTABLE =
ie.Document.frames("ctl00_contentPlaceHolderConteudo_iframeCarregadorPaginaExter
na").Document.all.tags("table")

ThisWorkbook.Worksheets(1).Range("A1") = objTABLE(2).Cells(2).innertext
ThisWorkbook.Worksheets(1).Range("A2") = objTABLE(2).Cells(3).innertext

End Sub

Agradeço antecipadamente, qualquer ajuda.

Milena

 
Postado : 28/08/2012 3:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Tente algo....

Sub ObtDados()
Dim doc As Object
Set doc = CreateObject("HTMLFile")

With CreateObject("MSXML2.XMLHTTP")
    .Open "GET", "http://www.bmfbovespa.com.br/pt-br/mercados/acoes/empresas/ExecutaAcaoConsultaInfoEmp.asp?CodCVM=20800"
    .Send
    Do: DoEvents: Loop Until .readystate = 4
    doc.body.innerHTML = .responsetext
    .abort
End With

With doc.getElementsByTagName("Table")(2)
    Sheets(1).cells(1, 1).Value = .cells(1).outerText
    Sheets(1).cells(2, 1).Value = .cells(3).outerText
End With
End Sub
 
Postado : 04/09/2012 9:34 am
(@milenamoreno)
Posts: 51
Trusted Member
Topic starter
 

vbalexandre, agradeço demais a solução apontada, perdoe não agradecê-lo antes, mas só vi sua mensagem hoje.

Estive estudando e tentei adaptá-la em meu projeto, mas se trocar " http://www.bmfbovespa.com.br/pt-br/mercados/acoes/empresas/ExecutaAcaoConsultaInfoEmp.asp?CodCVM=20800" (utilizada na rotina do vbalexandre) por " http://www.bmfbovespa.com.br/Cias-Listadas/Empresas-Listadas/ResumoEmpresaPrincipal.aspx?codigoCvm=20931&idioma=pt-br" aparece uma mensagem "A variável do objeto ou a variável do bloco With não foi definida".

Alguém sabe o motivo? Segue a rotina alterada.

Sub Dados()
Dim doc As Object

Set doc = CreateObject("HTMLFile")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", " http://www.bmfbovespa.com.br/Cias-Listadas/Empresas-Listadas/ResumoEmpresaPrincipal.aspx?codigoCvm=20931&idioma=pt-br"
.send
Do: DoEvents: Loop Until .ReadyState = 4
doc.body.innerHTML = .responseText
.abort
End With

With doc.getElementsByTagName("Table")(2)
Sheets(2).Range("h3").Value = .Rows(0).Cells(1).outerText
Sheets(2).Range("h4").Value = .Rows(0).Cells(2).outerText
End With
End Sub

 
Postado : 11/11/2012 5:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!!

Me diga porque você mudou o endereço.

Att

 
Postado : 12/11/2012 6:26 am
(@milenamoreno)
Posts: 51
Trusted Member
Topic starter
 

Bom dia!!!!

É que meu projeto busca dados em páginas distintas, tanto na página inicial (que funcionou) como na outra página, que não funcionou. Na hora que eu adaptei a rotina para a outra página, deu erro!

Muito obrigado.

 
Postado : 12/11/2012 6:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Você precisa consultar a página que contém os dados reais, e não a página que contém o Frame.

Um Frame é como uma janela, o conteúdo não é realmente sobre a página, ela só olha como ele é. Ele apenas mostrar-lhe o conteúdo de outra página, para obter dados a partir dessa página você precisa chamá-lo diretamente. Assim, a partir IE clique direito sobre a parte da página que você deseja extrair dados de e clique em propriedades, isso vai lhe dar a localização real da página - não é o que está na sua barra de endereços.

Att

 
Postado : 12/11/2012 6:51 am
(@milenamoreno)
Posts: 51
Trusted Member
Topic starter
 

Entendi, Alexandre!

Gostaria de agradecer imensamente por sua resposta.

Desejo muito sucesso à você.

Cordialmente

 
Postado : 12/11/2012 9:28 pm