Notifications
Clear all

Encerrando o "For" sem ao menos iniciá-lo

6 Posts
1 Usuários
0 Reactions
1,076 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Caros, muito bom dia a todos!

Estava tentando desenvolver uma rotina para tentar buscar uma informação de uma página da internet, sendo que o termo buscado seria o innertext de uma "TD". Encontrei na internet uma rotina que eu acredito que faça isso, porém durante a execução da rotina o "FOR" se encerra sem ao menos começar e isso me deixou confuso. A rotina que estou utilizando é:

Sub Extract_TD_text()

Dim URL As String
Dim IE As InternetExplorer
Dim HTMLdoc
Dim TDelements
Dim TDelement
Dim r As Long

'Saved from www vbaexpress com/forum/forumdisplay.php?f=17
URL = " http://www.bmfbovespa.com.br/Cias-Listadas/Empresas-Listadas/ResumoEmpresaPrincipal.aspx?codigoCvm=17639&idioma=pt-br"

Set IE = New InternetExplorer

With IE
.Navigate URL
.Visible = True

'Wait for page to load
While .Busy Or .ReadyState <> READYSTATE_COMPLETE: DoEvents: Wend

Set HTMLdoc = .Document
End With

Set TDelements = HTMLdoc.getElementsByTagName("TD")

r = 0
For Each TDelement In TDelements
'Look for required TD elements - this check is specific to VBA Express forum - modify as required
If TDelement.innerText Like "*(Quantidade de Ações)*" Then
Sheets(1).Range("A1").Offset(r, 0).Value = TDelement.innerText
r = r + 1
End If
Next

End Sub

Alguém saberia o motivo?

Agradeço antecipadamente qualquer ajuda.

Atenciosamente,
Silmar

 
Postado : 16/02/2013 12:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Veja se o Tópico abaixo ajuda, pelo menos foi dado como Resolvido, e é referente ao mesmo Site e Tabela :

VBA/IE - Capturar Dado de Uma TD [Resolvido]
viewtopic.php?f=10&t=6759

[]s

 
Postado : 17/02/2013 5:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Tambem não irá executar o for se TDelements estiver nulo/vazio

 
Postado : 17/02/2013 6:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Então, pegar dados de uma TD com base no número da tabela é muito "inseguro", pois se o site muda o layout, alterando o número da tabela, você acaba pegando dados desatualizados. Eu não acredito que não tenha uma forma de pegar uma "Td" pelo innertext. Essa é minha busca, pegar uma TD com base no innertext, se é que isso é possível.

Eu não consegui entender como é que a TD está vazia, pois na página há várias "TD´s", assim não entendo o motivo da FOR não rodar. Este comando "busca" todas as Td´s da página : "Set TDelements = HTMLdoc.getElementsByTagName("TD")", então, como pode ele estar nulo/vazio?

Vou tentar mais um pouco.

 
Postado : 17/02/2013 8:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Bom, não conheço muito de paginas na internet, mas sei que o retorno para a variavel e como [objetc], (pra min, means "Nulo") então by pass o comando For.
No Ozgrid, um sujeito com duvida semelhante http://www.ozgrid.com/forum/showthread.php?t=74589 , em alguns funciona outros sites não; então como sugestão de outro site ( http://forums.codeguru.com/showthread.p ... some-times) ele alterou o elemento de procura no lugar do tagname x tgid

 
Postado : 17/02/2013 8:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

É uma boa idéia...Vou pesquisar sobre o tgid. Infelizmente, quando o assunto é VBA/IE há pouca literatura em português, boa parte das soluções estão em inglês, então quem não domina a língua acaba sofrendo. Vou navegar por alguns blog´s da vida e sugerir que eles abordem um pouco este assunto.

Obrigado, Reinaldo, por sua atenção.

 
Postado : 17/02/2013 9:52 am