Notifications
Clear all

Soma Total de horas com função VB, dando valores AM PM

9 Posts
1 Usuários
0 Reactions
1,498 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Amigos, esta função que estou desenvolvendo esta somando a horas trabalhadas, mas quando chega apos 13:00 imprime 01:00 PM, e assim acontece em qualquer soma AM e PM aparecem.

Como solucionar isto.

Sub CalculaHorasPorDia(nomePlanilha As String, ByVal i As Integer)
Dim wr As Worksheet, wrLinha As Worksheet
Set wr = Sheets(nomePlanilha)
Set wrLinha = Sheets("Relatório Horas Trabalhada")
Dim calcHora As Date
Dim k As Integer, linhaImprimeFuncionario As Integer

    k = 4
    linhaImprimeFuncionario = 3

    Do While wr.Cells(k, 6).Value <> ""
        calcHora = calcHora + wr.Cells(k, 6).Value
        k = k + 1
    Loop
    
    Do While wrLinha.Cells(linhaImprimeFuncionario, 2).Value <> ""
       linhaImprimeFuncionario = linhaImprimeFuncionario + 1 'Conta as linhas já cadastradas para assim inserir na linha abaixo
    Loop
    
    wrLinha.Cells(linhaImprimeFuncionario, 2).Value = wr.Name
    wrLinha.Cells(linhaImprimeFuncionario, 3).Value = calcHora
    
End Sub

Pelo que estou vendo, o calculo esta funcionando perfeitamente, o problema é o tipo da célula que esta como Personalizada, mas se Eu ir manualmente e colocar a célula como Hora a soma fica correta.

O que tem de ser feito para corrigir isto, ao inserir a Hora, já formatar a célula com valor formatação (Hora)

Obrigado

Observação: Desculpem a minha teimosia em relação a querer fazer do meu jeito, sei que muitos aqui no fórum podem achar, isto mas para mim que estou começando, a desenvolver para Excel, tenho que levar umas cacetadas para aprender, sei que poderia ser mais lógico, mas como o conhecimento é bem básico em VB junto com Excel, vou capengando mas trabalhando constate, para a evolução do aprendizado.

 
Postado : 11/09/2016 5:09 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Consegui solucionar, de tanto pesquisar encontrei a resposta, através do Google, olha que pesquisei também aqui e não encontrei, e a resposta esta aqui:

Eu indico a Cells e dou um NumberFormat e depois coloco o calculo de horas
wrLinha.Cells(linhaImprimeFuncionario, 3).NumberFormat = "hh:mm"

wrLinha.Cells(linhaImprimeFuncionario, 3).Value = calcHora

Fonte onde encontrei
http://www.planilhando.com.br/forum/viewtopic.php?f=10&t=1827

 
Postado : 12/09/2016 7:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Amigos estou com problemas em relação a somar horas, quando a variável totalHoras recebe valores como no exemplo totalHoras = 24:00 + 2:00 a variável imprime na célula ( 01/01/1900 02:00:00 ) gostaria de saber como solucionar este problema

Já tentei formatar a célula com NumberFormat e não dá certo:

totHora = totHora + calcHora
wrLinha.Cells(lin, col + 2).NumberFormat = "hh:mm"
wrLinha.Cells(lin, col + 2).Value = calcHora

Fico no aguardo

 
Postado : 14/09/2016 5:59 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Experimente:

totHora = totHora + calcHora
Hora = Int(totHora * 24) ' calculada qtas horas
Minuto = Int((totHora * 24 - Int(totHora * 24)) * 60) 'calculado qtde minutos
segundo = ((totHora * 24 - Int(totHora * 24)) * 60 - Int((totHora * 24 - Int(totHora * 24)) * 60)) * 60
wrLinha.Cells(lin, col + 2).Value =Format(Hora, "00") & ":" & Format(Minuto, "00") & ":" & Format(segundo, "00")
 
Postado : 14/09/2016 10:08 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, este código postado por você funcionou perfeitamente.

E neste caso que Eu já tenho um valor alto de Horas 146:00 em uma célula, como faço para pegar ela, no formato que esta na celula?

Esta comentado onde esta dando o problema;

            '//////////////////////////////////////////////////////////
            '
            '
            'VARIÁVEL c ESTA RECEBENDO DA PLANILHA Gerar Relatórios O VALOR 176:00
            'MAS O VALOR FICA ERRADO RECEBENDO ESTE VALOR 06/01/1900 8:00:00
            '
            '
            '//////////////////////////////////////////////////////////
 
Postado : 16/09/2016 11:14 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Experimente alterar a declaração da variavel c para Double, esta como string e multiplicar o valor por 24

c = HoraEmMinutos(wrGerarRelatorios.Cells(3, 4).Value * 24, 0)

 
Postado : 16/09/2016 1:37 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Revisando experimente somente alterando a declaração da variavel. Sem efetuar a multiplicação por 24

 
Postado : 16/09/2016 1:51 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Reinaldo, não funcionou, a hora continua vindo 06/01/1900 8:00:00, acho que o problema esta no momento em que é capturada a hora que deve ser convertida para alguma coisa.

Tem que fazer alguma conversão nesta captura da hora
c = HoraEmMinutos(wrGerarRelatorios.Cells(3, 4).Value, 0)

Estou tentando aqui, caso consiga compartilho :D

 
Postado : 17/09/2016 4:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olha só o que fiz e funcionou, gostaria da sua análise, kkkkkkkk

Dim c As String
c = Int(Round((Format(wrGerarRelatorios.Cells(3, 4).Value, "[hh]") * 24) * 60))

Pode ser assim também tirando [hh] kkkkkk

Dim c As String
c = Int(Round((Format(wrGerarRelatorios.Cells(3, 4).Value, "") * 24) * 60))

O valor deu exatamente 10560

Agora parece que desempaquei, kkkkkkkkk

 
Postado : 17/09/2016 4:34 am