Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por storyon
#59932
Boa noite!
Esse script busca dados de um site que é atualizado de forma dinâmica , mas só consigo os novos dados se fecho e abro o Excel.

Dim html As New HTMLDocument
Set request = CreateObject("MSXML2.XMLHTTP")
request.Open "GET", "https://speedhive.mylaps.com/LiveTiming ... 1073743227", False
request.send
html.body.innerHTML = request.responseText

Como fazer para limpar o cache que fica armazenado da próxima vez que fazer a consulta, sem a necessidade de fechar o Excel e abrir novamente.
Somente dessa maneira que os dados são renovados.
Por storyon
#60039
Strogonoff escreveu:você precisa "matar a variável" para executar um novo procedimento..
tente
set request = nothing
Bom dia amigo.
Tentei "matar a variável", tanto o request, quanto o html, mas não deu certo. Ficou assim:

Sub Dados_Web()

Dim html As New HTMLDocument
Set request = CreateObject("MSXML2.XMLHTTP")
request.Open "GET", "https://speedhive.mylaps.com/LiveTiming ... 1073743574", False
request.send
html.body.innerHTML = request.responseText

lin = 2
For Item = 1 To 6
col = 2
For Each dados In html.getElementsByClassName("row-result result-" & Item & "-row")(0).getElementsByTagName("div")
Cells(lin, col) = dados.innerText
col = col + 1
Next
lin = lin + 1
Next

Set html = Nothing
Set request = Nothing

End Sub



Só atualiza os dados se eu fechar e abrir o Excel.
Avatar do usuário
Por Strogonoff
Posts Avatar
#60098
Boa tarde!!
Sempre temos um plano B, C,D....
Vamos criar uma rotina para a cada 30' executar sua macro
Sub ProgramarAlarme()

Application.OnTime Now + TimeValue("00:30:00"), " Dados_Web"
msgbox "Timer Ativado"
End Sub
Crie um botão e ative esse comando..
se precisar de um tempo maior é so alterar..
Infelizmente não consigo abrir sua rotina, por isso que estou tentando uma saída, conversei com o pessoal daqui, ninguém sabe precisar algo certo..
Se não der certo, tentamos outro modo..
Avatar do usuário
Por Strogonoff
Posts Avatar
#60110
Peço a gentileza de aguardar 1 semana no máximo, verificarei com alguns amigos, para não ficar no campo da achologia...
Missão dada tem que ser missão cumprida...
Por storyon
#60149
Raygsson escreveu: 29 Out 2020 às 17:57 Esse código é o mesmo que tinha ajustado no outro tópico, porém está tentando acessar outra URL. Essa URL está sendo direcionada pra outro endereço, o que exatamente quer fazer? Tá indo pra essa https://speedhive.mylaps.com/LiveTiming
Amigo, sua rotina funcionou perfeitamente, no quesito de buscar os dados em suas div. Porém, ao buscar os dados, neste exato momento, há uma corrida acontecendo conforme imagem em anexo, porém, no excel, ao rodar o script, os dados não são atualizados como deveria, tentando buscar os dados a cada 30 segundos ou 1 minuto.
O link da corrida que está acontecendo neste exato momento é esse: https://speedhive.mylaps.com/LiveTiming ... 1073747313

A tela da corrida está em anexo.
Você não está autorizado a ver ou baixar esse anexo.
Por Raygsson
Posts
#60150
Deixar rodando durante um tempo é fácil, no exemplo abaixo defini um período total de 1 minuto e pra atualizar a cada 5 segundos, você pode editar esses períodos.
Não encontrei a divergência entre o que foi capturado e o que esta no site, se tiver algum exemplo posso analisar.
Código: Selecionar todos
Sub Dados_Web()

Dim html As New HTMLDocument
Set request = CreateObject("MSXML2.XMLHTTP")

Tempo = Now()
TempoFinal = Tempo + TimeValue("00:01:00")

Do While Tempo <= TempoFinal

    Range("B2:J7").ClearContents
    
    request.Open "GET", "https://speedhive.mylaps.com/LiveTiming/WSNNEPRE-2147485101/Sessions/WSNNEPRE-1073747313", False
    request.send
    html.body.innerHTML = request.responseText

    lin = 2
    For Item = 1 To 6
    col = 2
    For Each dados In html.getElementsByClassName("row-result result-" & Item & "-row")(0).getElementsByTagName("div")
    Cells(lin, col) = dados.innerText
    col = col + 1
    Next
    lin = lin + 1
    Next
    
    Application.Wait (Now + TimeValue("00:00:05"))
    Tempo = Now()
  
Loop

Set html = Nothing
Set request = Nothing

MsgBox "Rotina Finalizada.", vbInformation, "Aviso."

End Sub

Avatar do usuário
Por Strogonoff
Posts Avatar
#60308
Amigo, Boa tarde!!
Desculpa ter passado a semana que pedi.
Verifique, estudei e outras coisitas más...
Uma coisa que chamou minha atenção desde o começo e de alguns amigos também,
1)você utiliza uma sub e não uma function para o retorno do seu rsultado, quando utilizamos um link externo, por exemplo um QRcode associado numa planilha, usamos uma function para um retorno de resultado mais dinamico.
2)o site que você utiliza oferece essa interface com o Excel, pode acontecer de ter algum delay nas informaçoes na hora de um repasse (já vi casos assim)
3)A sub está vinculada a planilha ? Você vinculou ela direto na planilha de retorno de resultado ou está nos módulos? Tente colocar o codigo na planilha e utilizar alguma funçãode tempo para atualização do resultado, como havia enviado anteriormente.

peço minhas sinceras desculpas estar no campo da achologia e suposição, uma vez que não tenho a planilha e somente algumas informações, mas espero que algumas dessas dicas acima ajudem a você resolver essa questão.
Abraço
Se quiser levantar mais algumas questão estamos a disposição.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord