Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como formato uma variavel para receber uma Hora?

Eu preciso que o tempo receba o resultado da conta como um horario e não como o valor que a hora representa.

Dim Tempo As Date
    Tempo = Time() / TimeValue("01:00:00")

Após esse calculo eu quero fazer uma verificação se TEMPO é ou não uma hora redonda, alguém sabe como posso fazer isso?

4 respostas
solução!

Você pode usar as funções do Excel diretamente no código VBA:


Sub UseFunction()
 Dim myRange As Range
 Set myRange = Worksheets("Sheet1").Range("A1:C10")
 answer = Application.WorksheetFunction.Min(myRange)
 MsgBox answer
End Sub

No exemplo acima, você está usando a função Mínimo() (= min()) que retorna o menor valor de um intervalo.

No seu caso, você poderia usar a função MINUTO() e ver se o resultado é igual a zero:

Minutos = Application.WorksheetFunction.Minute(tempo)
if (Minutos = 0) then ...

NOTA: Tem que usar sempre com Application.WorksheetFunction. para explicitar que está usando uma função embutida do Excel, e não uma função que por ventura possa ter criado com o mesmo nome.

n sei se entendi direito, pode explicar melhor sobre está função

Sub Atualizacao()

    Dim Tempo As Double
    Tempo = Time() / TimeValue("01:00:00")

    If (Tempo Mod 1) = 0 And (Time() <> TimeValue("08:00:00") Or Time() <> TimeValue("12:00:00") Or Time() <> TimeValue("16:00:00")) Then
        Call Atualizar_rel
    End If
    If (Tempo Mod 1) And (Time() = TimeValue("08:00:00") Or Time() = TimeValue("12:00:00") Or Time() = TimeValue("16:00:00")) Then
        Call Atualizar_rel
        Application.OnTime Earliesttime:=Now() + TimeValue("00:03:00"), procedure:="ENVIAR_EMAIL_ADD_PLANILHA", schedule:=True
    End If  

    Application.OnTime Earliesttime:=Now() + TimeValue("00:01:00"), procedure:="Atualizacao", schedule:=True

End Sub

Este é o codigo todo atualmente...

Bom, eu não estou entendendo direito seu código. Quando você dividiu por "01:00:00", era somente pra extrair as horas?

Desconsidere o que falei anteriormente. Você pode usar estas funções para obter horas, minutos e segundos:


Sub Teste()

    Dim Tempo

    Tempo = TimeValue("01:00:00") ' Ou faça seu cálculo aqui


  Dim Horas, Minutos, Segundos

  Horas = Hour(Tempo)  ' retorna as horas
  Minutos = Minute(Tempo) ' retorna os minutos
  Segundos = Second(Tempo) ' retorna os segundos


  If (Minutos = 0) And (Segundos = 0) Then
    msg = MsgBox("Hora cheia (redonda)!", vbOK)
    Else
    msg = MsgBox("Hora quebrada (não redonda)!", vbOK)
  End If


End Sub

E porque comparou com 8:00, 12:00 ou 16:00?


Sub Teste2()

    Dim Tempo

    Tempo = TimeValue("01:00:00") ' Ou faça seu cálculo aqui


  Dim Horas, Minutos, Segundos

  Horas = Hour(Tempo)  ' retorna as horas
  Minutos = Minute(Tempo) ' retorna os minutos
  Segundos = Second(Tempo) ' retorna os segundos


  If ((horas = 8) or (horas = 12) or (horas = 16)) and (Minutos = 0)) Then
    msg = MsgBox("Hora cheia (redonda)!", vbOK)
    Else
    msg = MsgBox("Hora quebrada (não redonda)!", vbOK)
  End If


End Sub

Como falei, não entendi bem o propósito.

Bom dia.

Pode ser uma variável Double zerar a hora para ter somente os minutos e segundos. se os minutos e segundos forem maior que zero é hora quebrada senão é hora cheia

abaixo um exemplo bem simples:

Sub teste()

Dim y As Double

y = TimeValue("09:00:10")

If TimeValue("00:" & Format(Minute(y), "00") & ":" & Format(Second(y), "00")) > 0 Then

MsgBox "Hora quebrada (não redonda)!"

Else

MsgBox "Hora cheia (redonda)!"

End If

Se isso te atendo peço que marque esse tópico como solucionado para me ajudar a ganhar XP

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software