Como no Access a exibição de horas é limitada (só vai até 23:59), é uma prática comum usar números Single nos cálculos. A exibição nos relatórios, porém, precisa ser no formato de horas.
Para converter um número Single para uma String no formato de horas, a seguinte função pode ser usada:
'**************************************************
'Funções para se trabalhar com horas acima de 24h'**************************************************Public Function HrStr (dblHora As Double) As String
'Pega um valor numérico e o converte para Horas/Minutos'Ex: 123,5 = "123:30"'Ex: 23,9833333333333 = "23:59"Dim strHoras As StringDim strMinutos As String'Pega as horas (parte inteira)strHoras = CStr(Fix(dblHora))'Pega os minutosstrMinutos = Format$(Abs((dblHora - Fix(dblHora)) * 60), "00")'Verifica se o total de minutos é 60If strMinutos = "60" ThenstrMinutos = "00"strHoras = CStr(CDbl(strHoras) + 1)End If'Concatena os doisHrStr = strHoras & ":" & strMinutosEnd FunctionEsta outra função faz o contrário: pega um string no formato de horas e converte para número:Public Function HrDbl(stHora As String) As Double'Converte um string de hora (formato (h)hh:mm) para Double'Ex: "135:30" = 135,5'Ex: "23:59" = 23,9833333333333Dim dblHoras As DoubleDim intMinutos As IntegerDim blnDoisPontos As Boolean, blnNum As BooleanDim strNum As String'Verifica se o sinal de dois pontos ':' está na terceira casa'da direita para esquerdaIf Asc(Left(Right(stHora, 3), 1)) = 58 ThenblnDoisPontos = TrueElseblnDoisPontos = FalseEnd If'Verifica se o resto dos dígitos são numéricosstrNum = Left(stHora, Len(stHora) - 3) & Right(stHora, 2)If IsNumeric(strNum) = True ThenblnNum = TrueElseblnNum = FalseEnd If'Sai do procedimento se o formato estiver incorretoIf (blnDoisPontos = False) Or (blnNum = False) ThenMsgBox "Informe a hora no formato hh:mm", vbCritical + vbOKOnlyExit FunctionEnd If'Pega os minutosIf CDbl(strNum) < 0 ThenintMinutos = CInt(Right(strNum, 2)) * (-1)ElseintMinutos = CInt(Right(strNum, 2))End If'Pega as horasdblHoras = Fix(CDbl(Left(strNum, Len(strNum) - 2)))'Calcula a horaHrDbl= dblHoras + (intMinutos / 60)
End Function
Tags: Microsoft Office, VBA, tips, convert, hour, hora, clock, time
Nenhum comentário:
Postar um comentário