Usuário com melhor resposta
Calculo de Horas acima de 24:00

Pergunta
-
Boa Tade!
Estou desenvolvendo um sistema em VBA, onde vou gerenciar as horas trabalhadas dos meus colaboradores, mas não estou conseguindo realizar o calculo do tipo 17:00 as 20:00 das 21:00 as 25:20, segue a codificação que realizaei para fazer esse calculo:
tenho uma tela de cadastro onde tenho 4 TextBox, funciona perfeitamente com horário abaixo de 23:59, caso seja colocado horário 24:00 ocorre um erro, caso coloque 00:00 realiza o calculo errado.
Desde já agradeço a atenção de todos!
Atenciosamente
Adriano Anacleto
Respostas
-
Estimado Adriano Anacleto:
Em computação, as datas e horários são apenas números. A data é a parte inteira do número e da hora é a parte decimal. Você pode subtrair uma hora de outro sem uma conversão ou usar uma função.
Se você quiser que o aplicativo Excel presente o resultado em formato de hora após as 24:00 h, você deve fornecer o seguinte formato personalizado na célula:
[h]: mm: ss
Nota: Desculpe por meus erros, mas eu não falo Português, so conheço um poco. Estava á procura dum site onde posa leer e chege cá ou Forum.
Atte.
Rafael
- Editado Rafael2ra sábado, 27 de outubro de 2012 19:50
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 31 de outubro de 2012 14:28
Todas as Respostas
-
-
Estimado Adriano Anacleto:
Em computação, as datas e horários são apenas números. A data é a parte inteira do número e da hora é a parte decimal. Você pode subtrair uma hora de outro sem uma conversão ou usar uma função.
Se você quiser que o aplicativo Excel presente o resultado em formato de hora após as 24:00 h, você deve fornecer o seguinte formato personalizado na célula:
[h]: mm: ss
Nota: Desculpe por meus erros, mas eu não falo Português, so conheço um poco. Estava á procura dum site onde posa leer e chege cá ou Forum.
Atte.
Rafael
- Editado Rafael2ra sábado, 27 de outubro de 2012 19:50
- Marcado como Resposta Hezequias VasconcelosModerator quarta-feira, 31 de outubro de 2012 14:28
-
Boa Noite Benzadeus!
Entendo um pouco de Vba, tinha algo pronto porem, não encontrei o arquivo, tentei refazer o código para postar, entretanto não consegui fazer funcionar.
Eu tinha uma tela de cadastro de horário de trabalho com 4 Texbox, com nomes Me.texBox_inicio, Me.texBox_final, Me.texBox_inicio2, Me.texBox_finial2, e um outro que seura o 5 TextBox com o nome Me.texBox_totalHora, que ao digitar as horas no ultimo Me.texBox_final2, dando enter já me apresentaria o total de horas trabalhadas no Me.texBox_TotalHora.
Teria algum exemplo para me ajudar?
Desde já agradeço atenção!
Adriano Anacleto..
-
Bom dia
Encontrei o meu exemplo segue abaixo:
Private Sub Text_totalhora_Enter()
Me.Text_totalhora = Format(TimeValue(Me.Text_horainicio) - TimeValue(Me.Text_horafinal) + TimeValue(Me.Text_horainicio2) - TimeValue(Me.Text_horafinal2), "hh:mm:ss")
End Sub
-
Estimado Adriano Anacleto:
O código exige algumas mudanças para a tarefa que você deseja.
- Adicione a condição para calcular corretamente o total de horas em caso de a última hora é maior do que 24.
- Corrigir a fórmula que totaliza o número de horas trabalhadas.
A fórmula TimeValue() produz erro se o texto ou argumento indicado é maior do que 24 horas. Deve haver uma análise de conteúdo e processamento da caixa Text_horafinal2, antes de soma e total de horas trabalhadas..
Para este fim, proponho o seguinte código para este procedimento:
Private Sub Text_totalhora_Enter()
'Presume-se que todas as caixas de texto têm dados e incorretas.
'Análise e tratamento da hora final 2.
vlTextoFinal2 = Text_horafinal2.Text
vlPosicion = InStr(vlTextoFinal2, ":")
vlHoraFinal2 = Val(Left(vlTextoFinal2, vlPosicion - 1))
If vlHoraFinal2 > 23 Then
vlTextoFinal2 = CStr(vlHoraFinal2 Mod 24) & Right(vlTextoFinal2, Len(vlTextoFinal2) - (vlPosicion - 1))
vlHoraFinal2 = vlHoraFinal2 - vlHoraFinal2 Mod 24
Else
vlHoraFinal2 = 0
End If
'Cálculo do total de horas trabalhadas.
Me.Text_totalhora.Text = Format((TimeValue(Me.Text_horafinal.Text) - TimeValue(Me.Text_horainicio.Text)) + (vlHoraFinal2 / 24 + TimeValue(vlTextoFinal2) - TimeValue(Me.Text_horainicio2.Text)), "h:mm:ss")
End Sub
Atte.
Rafael
-