FUNCAO PARA CALCULO DE HORAS

ELMO01 17/08/2009 16:22:01
#320076
Boa tarde pessoal,

Necessito de uma função que ao digitar a hora, verifica se a hora digitada não ultrapasse os 60 minutos, se ultrapassar, a hora será acrescida.

Obrigado,
RICART 17/08/2009 16:27:40
#320077
Explique melhor qual a regra que vc quer implementar.
A hora digitada será comparada com o quê?
ELMO01 17/08/2009 16:30:59
#320078
Ricart - tenho um MaskEdit no formato HH:MM, quando o operador digitar uma determinada hora, a função deverá verificar se os minutos é menor que 60, se for, tudo bem, mas se não for deverá incrementar este mask com a hora exata.

Ex:

hora digitada: 12:65
hora correta: 13:05

ALEMAO 17/08/2009 16:44:49
#320080
Boa tarde amigo... acho que isto aqui vai te ajudar... passa como parâmetro para esta função uma string ex: (15:30)

Public Function ValidaHora(Hora As String) As Boolean
[ô] quebra a string em dois digitos de hora e dois de minuto
str_Hora = Mid$(Hora, 1, 2)
str_Minuto = Mid$(Hora, 4, 2)

[ô] testa pra ver se vai vir alguma coisa fora do formato normal... faltando um digito por exemplo (15:0)
If Len(Hora) <> 5 Then
MsgBox [Ô]Hora inválida! [Ô], vbCritical, [Ô]AVISO[Ô]
ValidaHora = False
Exit Function
End If

[ô] se a hora for maior que 23 esta errado... só vai até 23:59, depois é 00:00
If CInt(str_Hora) > 23 Then
MsgBox [Ô]Hora inválida! [Ô], vbCritical, [Ô]AVISO[Ô]
ValidaHora = False
Exit Function
End If

[ô] se o minuto for maior que 59 tambem não passa...
If CInt(str_Minuto) > 59 Then
MsgBox [Ô]Hora inválida! [Ô], vbCritical, [Ô]AVISO[Ô]
ValidaHora = False
Exit Function
End If

[ô] se a hora for menor ou igual a 23 e o minuto menor ou igual a 59 então validahora = true
ValidaHora = True

End Function

podes testar mandando direto o valor de um ActiveText por exemplo... formatado com com TextMask = TimeMask

EX: If ValidaHora(ActHor.Text) = False Then


Qualquer coisa podes prender o grito... dentro do possível estarei as ordens para ajudar.
Abraço
ROBIU 17/08/2009 16:49:01
#320082
Resposta escolhida
Bom, criei a função exatamente como você pediu

Function Horas(MyHoras As String) As String
Dim vHora As String, vMin As String
vHora = Mid(MyHoras, 1, 2)
vMin = Mid(MyHoras, 4, 5)
If vMin > 59 Then
vMin = Val(vMin) - 60
vHora = Val(vHora) + 1
End If
Horas = Format(vHora & [Ô]:[Ô] & vMin, [Ô]hh:mm[Ô])
End Function


Para usar, coloca no lostFocus da msk

Private Sub Msk_LostFocus()
Msk.Text = Horas(Msk.Text)
End Sub
ELMO01 17/08/2009 16:54:48
#320084
Robiu - vc acertou no alvo, é isto que eu queria - mt obrigado
Tópico encerrado , respostas não são mais permitidas