Ir ao conteúdo
  • Cadastre-se

Excel Preenchimento automático de valores entregues pelo RTD (Real Time Data)


Ir à solução Resolvido por Midori,

Posts recomendados

Olá senhores programadores!

Gostaria de montar algo via VBA, que preenchesse as células automaticamente a medida que o tempo for passando, ou seja, a cada 15 min o valor atual é guardado na célula do tempo correspondente. Por ex: Supondo que seja 10:45, e o valor que está em J13 (1,26) deverá ser armazenado automaticamente na célula O22; às 11:00 na célula O23, às 11:15 na O24 e assim sucessivamente até chegar as 12:00 (meio dia paro de operar). Tenho feito isso manualmente usando um despertador e isso atrapalha muito meu rendimento.

GRAFICOpng.png

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Midori disse:

Olá @Midori!!

Já vi os dois tópicos de cabo a rabo, foi baseado neles que quase consigo solucionar meu problema. Quero que ele grave o valor a cada 15 min, ele fez isso, mas só para quando o valor da célula [I13] muda, então fica imprimindo infinitamente, assim bagunça o gráfico. Confesso que não consigo consertar esse código. Obrigado pelo retorno! Segue: 

Public Sub Cotacao()
Dim AreaRTD     As Range
Dim UltLinha    As Long
    
    Set AreaRTD = [I13]
    
            If Range("I11").Value = "Stop" Then
                   Exit Sub
            End If
            
       UltLinha = [P14].CurrentRegion.Rows.Count + 1
       [P14].Cells(UltLinha).Value = AreaRTD.Value
        
        Call IniciarCotacao
End Sub


Sub IniciarCotacao()
        Range("I11").Value = "Coletando..."
        Call Application.OnTime(TimeValue("09:03:00"), "Cotacao")
        Call Application.OnTime(TimeValue("09:15:00"), "Cotacao")
        Call Application.OnTime(TimeValue("09:30:00"), "Cotacao")
        Call Application.OnTime(TimeValue("09:45:00"), "Cotacao")
        Call Application.OnTime(TimeValue("10:00:00"), "Cotacao")
        Call Application.OnTime(TimeValue("10:15:00"), "Cotacao")
        Call Application.OnTime(TimeValue("10:30:00"), "Cotacao")
        Call Application.OnTime(TimeValue("10:45:00"), "Cotacao")
        Call Application.OnTime(TimeValue("11:00:00"), "Cotacao")
        Call Application.OnTime(TimeValue("11:15:00"), "Cotacao")
        Call Application.OnTime(TimeValue("11:30:00"), "Cotacao")
        Call Application.OnTime(TimeValue("11:45:00"), "Cotacao")
        Call Application.OnTime(TimeValue("12:00:00"), "Cotacao")
End Sub

Sub PararCotacao()
        Range("I11").Value = "Stop"
End Sub

 

 

midori.png

Link para o comentário
Compartilhar em outros sites

  • Solução

@Fredy Ferreira Não precisa de OnTime. Como a planilha já tem os horários que devem ser atualizados, é só fazer a busca por esses horário a cada atualização do RTD (normalmente é a cada 2s),

 

Private Sub Worksheet_Calculate()
    Call AtualizaCotacao([I13].Value, Format(Now, "HH:MM"))
End Sub

Sub AtualizaCotacao(Cotacao As Double, HoraAtual As String)
    Dim ProcuraHora As Range
    
    Set ProcuraHora = [O15:O27].Find( _
        What:=HoraAtual, LookIn:=xlValues, LookAt:=xlWhole)
        
    If Not ProcuraHora Is Nothing Then
        If ProcuraHora(1, 2) = "" Then
            ProcuraHora(1, 2) = Cotacao
        End If
    End If
End Sub

 

Assim o evento Calculate vai chamar o procedimento AtualizaCotacao a cada atualização da cotação na planilha. E fará o registro caso ainda não tenha nenhum valor.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

3 horas atrás, Midori disse:

@Fredy Ferreira Não precisa de OnTime. Como a planilha já tem os horários que devem ser atualizados, é só fazer a busca por esses horário a cada atualização do RTD (normalmente é a cada 2s),

 

Private Sub Worksheet_Calculate()
    Call AtualizaCotacao([I13].Value, Format(Now, "HH:MM"))
End Sub

Sub AtualizaCotacao(Cotacao As Double, HoraAtual As String)
    Dim ProcuraHora As Range
    
    Set ProcuraHora = [O15:O27].Find( _
        What:=HoraAtual, LookIn:=xlValues, LookAt:=xlWhole)
        
    If Not ProcuraHora Is Nothing Then
        If ProcuraHora(1, 2) = "" Then
            ProcuraHora(1, 2) = Cotacao
        End If
    End If
End Sub

 

Assim o evento Calculate vai chamar o procedimento AtualizaCotacao a cada atualização da cotação na planilha. E fará o registro caso ainda não tenha nenhum valor.

 

 

Caro @Midori, não sei como agradecer. Ficou perfeito!

Passei semanas remendando códigos e não conseguia. Em um intervalo curtíssimo de tempo, você resolve meu problema.

 

Muito Obrigado ! 

Link para o comentário
Compartilhar em outros sites

22 horas atrás, Midori disse:

@Fredy Ferreira Não precisa de OnTime. Como a planilha já tem os horários que devem ser atualizados, é só fazer a busca por esses horário a cada atualização do RTD (normalmente é a cada 2s),

 

Private Sub Worksheet_Calculate()
    Call AtualizaCotacao([I13].Value, Format(Now, "HH:MM"))
End Sub

Sub AtualizaCotacao(Cotacao As Double, HoraAtual As String)
    Dim ProcuraHora As Range
    
    Set ProcuraHora = [O15:O27].Find( _
        What:=HoraAtual, LookIn:=xlValues, LookAt:=xlWhole)
        
    If Not ProcuraHora Is Nothing Then
        If ProcuraHora(1, 2) = "" Then
            ProcuraHora(1, 2) = Cotacao
        End If
    End If
End Sub

 

Assim o evento Calculate vai chamar o procedimento AtualizaCotacao a cada atualização da cotação na planilha. E fará o registro caso ainda não tenha nenhum valor.

 

Olá @Midori

 

Hoje fui abrir minha planilha mas o código não está funcionando, não faço ideia do que aconteceu!

Não está capturando os dados, não sei o que fiz de errado

 

 

Screenshot_4.png

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...

Olá @Midori, não sei se posso reabrir o tópico, caso não peço desculpas

 

Não entendo porque minha planilha não executa o código automaticamente, ela só começa gravar os dados a partir das 10:00

 

pra fazer ela executar antes disso eu preciso clicar em exibir código e executar no botãozinho "play (executar Sub/UseForm)".

 

se eu somente abrir a planilha, só começa gravar a partir das 10:00 como mostra a imagem. Pode ajudar ?

 

O código continua o mesmo.

 

Screenshot_2.png.5946b0e7114d14f69a5ea38e8e9aaafc.png

 

Screenshot_1.png.a93455989f5a3b48737da1b198f90a1d.png

 

 

Link para o comentário
Compartilhar em outros sites

46 minutos atrás, Fredy Ferreira disse:

se eu somente abrir a planilha, só começa gravar a partir das 10:00 como mostra a imagem. Pode ajudar ?

 

O evento que ativa a macro é o Calculate que acontece quando as fórmulas da planilha são atualizadas, verifique o horário que começa a atualização da célula I13. O range da busca é N15:N27, caso tenha mudado tem que editar a macro.

Link para o comentário
Compartilhar em outros sites

22 horas atrás, Midori disse:

O evento que ativa a macro é o Calculate que acontece quando as fórmulas da planilha são atualizadas, verifique o horário que começa a atualização da célula I13. O range da busca é N15:N27, caso tenha mudado tem que editar a macro.

 

Aparentemente tudo normal com código, está ai a imagem completa

pra que ela funcione 100% eu preciso clicar no botão executar como mostra na imagem, caso contrário, só começa registrar a partir das 10:00.

Será que não seria problema na formatação do horário?

 

 

 

Screenshot_3.png

Link para o comentário
Compartilhar em outros sites

O mercado futuro, mini dólar, abre as 9:00 em ponto. Assim que abre já começa a oscilação de preço. Hummm, mas agora entendi, vou ficar de olho pra ver se realmente acontece a oscilação de preço na planilha. Pode ser que isso ocorre só depois que o mercado a vista abre (10:00h). Agora só segunda-feira pra conferir, eu volto pra dar um feedback. Obrigado pela dica!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!