none
Calculo de Horas acima de 24:00 RRS feed

  • 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

    sexta-feira, 26 de outubro de 2012 17:27

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



    sábado, 27 de outubro de 2012 19:43

Todas as Respostas

  • Faltou você colocar o código.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 26 de outubro de 2012 20:54
    Moderador
  • 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



    sábado, 27 de outubro de 2012 19:43
  • 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..

    domingo, 28 de outubro de 2012 23:53
  • 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

    segunda-feira, 29 de outubro de 2012 10:44
  • Estimado Adriano Anacleto:

                O código exige algumas mudanças para a tarefa que você deseja.

    1. Adicione a condição para calcular corretamente o total de horas em caso de a última hora é maior do que 24.
    2. 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

    segunda-feira, 29 de outubro de 2012 16:10
  • Boa Tarde Rafael2ra!

    Muitissimo obrigado! Ficou perfeito, funcionou conforme minha necessidade!

    Agradeço sua atenção!

    Adriano Anacleto

    segunda-feira, 29 de outubro de 2012 17:27