Olá Thiago,
Tente com este exemplo, fazendo as alterações necessárias:
Desde já há algum tempo vinha me debatendo com este tema. Como somar horas de uma forma simples, isto é, criar uma função que somasse as horas trabalhadas por um empregado? Descobri que poderia utilizar a função DSum para somar as horas pelo menos até completar 24 horas.
TotalHoras = Format(DSum("DIFERENCA", "tblFuncHoraNormal"), "hh:mm:ss") 'TotalHoras é o nome de uma caixa de texto que receberá o valor total do somatório das horas. DIFERENCA é o nome de uma caixa de texto que receberá a quantidade de horas trabalhadas durante uma semana, digamos, desde que não ultrapasse 24 horas.
Vou tentar elucidar com o seguinte exemplo. Suponhamos que você contrate um eletricista para trabalhar pelo menos 2(duas) horas por dia ao longo de uma semana em sua casa. Crie uma tabela com os seguintes campos IDNOME(NumeraçãoAutomática), NOME(Texto), DATA(Data/Hora), HORAINICIO(Data/Hora), HORAFIM(Data/Hora) e DIFERENCA(Data/Hora).
Crie agora um formulário tabular e no evento Ao Entrar do campo DIFERENCA, coloque o seguinte código:
Private Sub DIFERENCA_Enter()
'Código de Eduardo Machado (Good Guy)
On Error Resume Next
Dim sIntervalo As Date 'Intervalo da hora do almoço
If HORAFINAL - HORAINICIAL >= #8:00:00 AM# Then
sIntervalo = "01:00:00"
DIFERENCA = (HORAFINAL - HORAINICIAL) - sIntervalo
ElseIf (HORAFINAL - HORAINICIAL) >= #6:00:00 AM# And (HORAFINAL - HORAINICIAL) < #8:00:00 AM# Then
sIntervalo = "00:15:00" 'Intervalo do café da manhã
DIFERENCA = (HORAFINAL - HORAINICIAL) - sIntervalo
ElseIf HORAINICIAL >= #10:00:00 AM# And HORAINICIAL <= #11:59:59 AM# And HORAFINAL = #1:00:00 PM# Then
sIntervalo = "00:00:00"
DIFERENCA = (HORAFINAL - HORAINICIAL) - sIntervalo
ElseIf HORAINICIAL >= #6:00:00 PM# And HORAINICIAL <= #11:59:59 PM# And HORAFINAL <= #6:00:00 AM# Then
sIntervalo = "01:00:00" 'Intervalo da hora de jantar
DIFERENCA = (HORAFINAL - HORAINICIAL) - sIntervalo
Else
DIFERENCA = (HORAFINAL - HORAINICIAL)
End If
End Sub
No Rodapé do formulário, coloque uma caixa de texto com o nome TotalHoras
Bem, a partir de agora é opcional, ou você cria um botão para o código para calcular a soma ou coloque o código no evento Ao Sair do campo DIFERENCA.
Private Sub DIFERENCA_Exit(Cancel As Integer)
TotalHoras = Format(DSum("DIFERENCA", "tblFuncHoraNormal"), "hh:mm:ss")
End Sub
Fonte: http://www.goodguyaccessvba.com.br/dicas_vba_ii_17.html
Para realizar o cálculo dividindo o resultado da diferença de horas pela quantidade:
Exemplo:
a-) Horainicial : 8:00 horas HoraFinal : 08:12 horas
total = Format(([valor2] - [valor1]) * 24, "#0.0")
total = 0,2
Divida este valor pela quantidade. Não esqueça de definir o tipo de valor das caixas de texto para hora normal ou hora abrevidada na propriedade das caixas de texto.
Última edição por good guy em 9/7/2013, 18:31, editado 5 vez(es)