Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos A Sanches

Função

Recommended Posts

Ola galera tudo bom? eu estou tempo um probleminha com essa função aqui ela serve para calcular a diferença de um periodo de tempo por exemplo (das 8:00 as 12:00 = 4 horas) quando a função calcula horas inteiras como 8:00, 9:00, 11:00 e assim por diante ele funciona normalmente mais quando são "horas quebradas" como 8:25, 9:45 e assim por diante essa função começa a calcular o intervalo errado pegando tempo a mais, alguem sabe se existe outra função que faça isso ou como eu posso modificar essa para que ela funcione corretamente qualquer ajuda e válida =) agradeço antecipadamente

 

Function CalculaHora(HrIni, HrFim) As Double
	Dim dblDifHoras As Double
	Dim Test1 As Date
	Dim test2 As Date
	Dim test3 As Date
	If IsNull(HrIni + HrFim) Then Exit Function
		dblDifHoras = DateDiff("n", HrIni, HrFim)
		CalculaHora = dblDifHoras
	CalculaHora = dblDifHoras / 60
End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que você está declarando como Datas, então ele entende não como horas e minutos e sim como dias, veja este exemplo de um procedimento que fiz para somar horas no formato 12:30:25 hh:mm:ss.

Exemplo 10:25:30 + 02:13:14 = 12:38:44

Para testar este codigo basta colocar tres textbox sendo os Nomes: text1, text2 e text_resultado, lançar as horas nas text's 1 e 2 e clicar no botão do codigo abaixo:

 

Private Sub Command1_Click()
Dim vsegundo1 As Single
Dim vsegundo2 As Single
Dim SomaSegundo As Single
Dim RestoSegundo As Single
Dim novoSegundo As Single
Dim vminuto1 As Single
Dim vminuto2 As Single
Dim SomaMinuto As Single
Dim RestoMinuto As Single
Dim NovoMinuto As Single
Dim vhora1 As Single
Dim vhora2 As Single
Dim novahora As Single

vsegundo1 = Right(Text1, "2")
vsegundo2 = Right(Text2, "2")
SomaSegundo = vsegundo1 + vsegundo2
novoSegundo = IIf(SomaSegundo > 60, SomaSegundo - 60, SomaSegundo)
RestoSegundo = IIf(Format(SomaSegundo / 60, "standard") > 1, Format(SomaSegundo / 60, "0"), "0")

vminuto1 = Mid(Text1, "4", "2")
vminuto2 = Mid(Text2, "4", "2")
SomaMinuto = vminuto1 + vminuto2 + RestoSegundo
NovoMinuto = IIf(SomaMinuto > 60, SomaMinuto - 60, SomaMinuto)
RestoMinuto = IIf(Format(SomaMinuto / 60, "standard") > 1, Format(SomaMinuto / 60, "0"), "0")

vhora1 = Mid(Text1, "1", "2")
vhora2 = Mid(Text2, "1", "2")
novahora = vhora1 + vhora2 + RestoMinuto


Text_resultado = novahora & ":" & NovoMinuto & ":" & novoSegundo

End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.