SOMAR HORA

GUILHERMEMFA 13/07/2010 13:36:06
#347208
Boa tarde pessoal!
To precisando resolver a seguinte situação.
A rotina é para somar horas de 2 MaskEdBox. O que vou passar abaixo é apenas um exemplo para facilitar a compreensão:

tenho um form com:
02 - MaskEdBox (Propriedade Mak = ##:##:##)
01 - CommandButton
01 - Label

O Form possui o seguinte código:

Private Sub Command1_Click()
SomaHorasOS
End Sub

Private Sub SomaHorasOS()
Dim tempo As Long
Dim seg As Long, min As Long, hora As Long
Dim matriz
Dim matriz2

tempo = 0

[ô]Trabalha Tempo 1
matriz2 = Split(mskCadastro(0), [Ô]:[Ô])
tempo = tempo + (CLng(matriz2(0)) * 3600)
tempo = tempo + (CLng(matriz2(1)) * 60)
tempo = tempo + CLng(matriz2(2))

[ô]Trabalha Tempo 1
matriz2 = Split(mskCadastro(1), [Ô]:[Ô])
tempo = tempo + (CLng(matriz2(0)) * 3600)
tempo = tempo + (CLng(matriz2(1)) * 60)
tempo = tempo + CLng(matriz2(2))

seg = tempo Mod 60
tempo = tempo / 60
min = tempo Mod 60
hora = tempo / 60
Label1.Caption = Format(hora, [Ô]00[Ô]) & [Ô]:[Ô] & Format(min, [Ô]00[Ô]) & [Ô]:[Ô] & Format(seg, [Ô]00[Ô])
End Sub

Qdo entro com horas até 30min soma certo.
Qdo entro com horas acima de 30min é adicionado uma hora a mais.
Saberiam me dizer pq?

Obs: Essa rotina peguei na internet, a princípio tva mto bom, até eu perceber esse problema.
MAXPAP 13/07/2010 14:07:31
#347211
Amigo, não precisa fazer tudo isso não.

basta, usar cdate. Exemplo abaixo


txtResult = CDate(h1.Text) + CDate(h2.Text)


[ô]h1 campo primeira hora
[ô]h2 campo segunda hora
[ô]txtResult está recebendo o resultado.

JONATHANSTECKER 13/07/2010 14:48:01
#347218
If Text1 = [Ô][Ô] Or Text2 = [Ô][Ô] Then
MsgBox [Ô]Insira uma hora válida[Ô], vbExclamation, [Ô]Calcula hora[Ô]
Text1 = [Ô][Ô]
Text2 = [Ô][Ô]
Text1.SetFocus
Else
Datainicial = CDate(Text1)
Datafinal = CDate(Text2)
resulsoma = (CDate(CDate(Datafinal) + CDate(Datainicial)))
Label1 = CDate(resulsoma)
End If
GUILHERMEMFA 13/07/2010 16:10:46
#347237
da forma que vcs colocaram nao tah dando certo no meu caso.

Vou tentar expor a situação:

tenho um listview que possui uma coluna de horas como segue abaixo

Coluna de horas
16:56:00
23:34:43
10:00:00
20:21:01
56:32:26

Preciso percorrer todo o listview e somar todas essas horas e exibir em um label.
Da forma como vcs sugeriram tah retornando um resultado tipo esse abaixo:

01/01/1900 12:24:00

como resolvo isso? Grato
PH1959 13/07/2010 17:04:56
#347244
Resposta escolhida
o problema está aki
tempo = tempo + CLng(matriz2(2))

[txt-color=#e80000]seg = tempo Mod 60
tempo = tempo / 60
min = tempo Mod 60
hora = tempo / 60
Label1.Caption = Format(hora, [Ô]00[Ô]) & [Ô]:[Ô] & Format(min, [Ô]00[Ô]) & [Ô]:[Ô] & Format(seg, [Ô]00[Ô])[/txt-color]End Sub

O correto é...

hora= Int( tempo/3600) [ô] aki são calculadas qtas horas
tempo= tempo- (hora*3600) [ô]aki subtraimos do tempo a qtde de segundos referentes as horas inteiras
minuto= int(tempo/60) [ô] aki calculamos os minutos
segundo= tempo- (minuto*60) [ô]aki subtraimos do tempo a qtde de segundos referentes aos minutos inteiros sobrandos os segundos

Label1.Caption = Format(hora, [Ô]00[Ô]) & [Ô]:[Ô] & Format(min, [Ô]00[Ô]) & [Ô]:[Ô] & Format(seg, [Ô]00)
GUILHERMEMFA 14/07/2010 08:56:39
#347271
Perfeito
vc apenas mudou o nome das variáveis e esqueceu de fechar aspas. Era isso msm que eu tva precisando vlw PH1959

hora= Int( tempo/3600) [ô] aki são calculadas qtas horas
tempo= tempo- (hora*3600) [ô]aki subtraimos do tempo a qtde de segundos referentes as horas inteiras
[txt-color=#e80000]minuto[/txt-color]= int(tempo/60) [ô] aki calculamos os minutos
[txt-color=#e80000]segundo[/txt-color]= tempo- ([txt-color=#e80000]minuto[/txt-color]*60) [ô]aki subtraimos do tempo a qtde de segundos referentes aos minutos inteiros sobrandos os segundos

Label1.Caption = Format(hora, [Ô]00[Ô]) & [Ô]:[Ô] & Format(min, [Ô]00[Ô]) & [Ô]:[Ô] & Format(seg, [Ô]00[txt-color=#e80000][Ô][/txt-color])
Tópico encerrado , respostas não são mais permitidas