SOMAR HORAS SEM PASSAR PARA OUTRO DIA
Bom dia preciso somar horas sem passar para outra data. EX:
Tenho varias horas:
07:45
08:55
10:40
-------
27:20
Só que retorna 03:20. Por que ?
A soma maior que 24 horas, zera e começa a somar de novo. Já aproveitando o tópico preciso calcular o valor das horas. Tipo assim:
27:20 x R$ 5,20 = ?
como calcular ?
Tenho varias horas:
07:45
08:55
10:40
-------
27:20
Só que retorna 03:20. Por que ?
A soma maior que 24 horas, zera e começa a somar de novo. Já aproveitando o tópico preciso calcular o valor das horas. Tipo assim:
27:20 x R$ 5,20 = ?
como calcular ?
Bom vamos lá para você obter um valor maior que 24 horas, você trá que separar as horas dos minutos e somar separadamente:
De onde você pega estes valores?
quanto a calcular basta colocar um ponto no lugar de dois pontos e efetuar a multiplicação, exemplo: 27.2 * 5.20 = 141.44
De onde você pega estes valores?
quanto a calcular basta colocar um ponto no lugar de dois pontos e efetuar a multiplicação, exemplo: 27.2 * 5.20 = 141.44
Muito obrigado pela atenção Marcelo, estou quase ficando louco.
Uso assim:
Set Filtra_Periodo = Banco.OpenRecordset([Ô]SELECT * FROM Horario WHERE Codigo = [Ô] & TxtCodigo & [Ô] and Data >= [Ô] & [Ô]#[Ô] & Format((MskInicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] AND Data <= [Ô] & [Ô]#[Ô] & Format((MskFinal), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô], dbOpenDynaset)
If Filtra_Periodo.RecordCount <> 0 Then
Filtra_Periodo.MoveFirst
Horas = 0
Saldo = 0
Do Until Filtra_Periodo.EOF
Horas = Horas + CStr(Filtra_Periodo!HorasDia)
Saldo = Saldo + CDate(Filtra_Periodo!SaldoDia)
Filtra_Periodo.MoveNext
Loop
End If
LblTotalExtra.Caption = Format(CDate(Horas), [Ô]Hh:mm[Ô])
LblTotalDia.Caption = Format(CDate(Saldo), [Ô]Hh:mm[Ô])
Uso assim:
Set Filtra_Periodo = Banco.OpenRecordset([Ô]SELECT * FROM Horario WHERE Codigo = [Ô] & TxtCodigo & [Ô] and Data >= [Ô] & [Ô]#[Ô] & Format((MskInicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] AND Data <= [Ô] & [Ô]#[Ô] & Format((MskFinal), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô], dbOpenDynaset)
If Filtra_Periodo.RecordCount <> 0 Then
Filtra_Periodo.MoveFirst
Horas = 0
Saldo = 0
Do Until Filtra_Periodo.EOF
Horas = Horas + CStr(Filtra_Periodo!HorasDia)
Saldo = Saldo + CDate(Filtra_Periodo!SaldoDia)
Filtra_Periodo.MoveNext
Loop
End If
LblTotalExtra.Caption = Format(CDate(Horas), [Ô]Hh:mm[Ô])
LblTotalDia.Caption = Format(CDate(Saldo), [Ô]Hh:mm[Ô])
então vamos tentar resolver, este Filtra_Periodo!SaldoDia é aquela multiplicação que você disse?
Só uma correção, não é só colocar ponto no lugar dos dois pontos pra calcular a hora, assim você pegaria o valor errado, por exemplo se é 1:30, o correto no calculo seria usar 1,5 e não 1,3, já que 30 minutos é metade de uma hora
O correto é pegar o valor da hora e somar com o valor dos minutos / 60, por exemplo, 27:20 ficaria 27 + 20 / 60 = 27,33 aproximadamente, então com esse valor fazer como o MARCELO disse
O correto é pegar o valor da hora e somar com o valor dos minutos / 60, por exemplo, 27:20 ficaria 27 + 20 / 60 = 27,33 aproximadamente, então com esse valor fazer como o MARCELO disse
Não marcelo, ele filtra o periodo, o codigo do funcionario e ai soma, como na tela em anexo
que grid você está utlizando pois o ideal é fazer o calculo pegando os dados do grid ja preenchido?
Marcelo é o Dbgrid do vb6 mesmo.
para preencher o dbgrid uso :
SQL = [Ô]SELECT * FROM Horario WHERE Codigo = [Ô] & TxtCodigo & [Ô] and Data >= [Ô] & [Ô]#[Ô] & Format((MskInicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] AND Data <= [Ô] & [Ô]#[Ô] & Format((MskFinal), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô]ORDER By Data[Ô] [ô][ô]order by Data
Data1.RecordSource = SQL
Data1.Refresh
para preencher o dbgrid uso :
SQL = [Ô]SELECT * FROM Horario WHERE Codigo = [Ô] & TxtCodigo & [Ô] and Data >= [Ô] & [Ô]#[Ô] & Format((MskInicial), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô] AND Data <= [Ô] & [Ô]#[Ô] & Format((MskFinal), [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô] & [Ô]ORDER By Data[Ô] [ô][ô]order by Data
Data1.RecordSource = SQL
Data1.Refresh
Adapta esse código na sua rotina para converter de horas para decimal:
Dim vSaldoHrs As Double, HrsDec As Double
If IsDate(NomedaCol) Then
HrsDec = Hour(NomeDaCol) + Minute(NomedaCol) / 60
vSaldoHrs = vSaldoHrs + HrsDec
End If
Robiu, não deu certo.
Estive vendo no excel como formatar uma celula para maior que 24 horas, posso estar falando bobagem, mais fica assim:
Selection.NumberFormat = [Ô][h]:mm:ss;@[Ô]
ai aceita maior que 24 horas, como colocar isso no vb6 ?
Estive vendo no excel como formatar uma celula para maior que 24 horas, posso estar falando bobagem, mais fica assim:
Selection.NumberFormat = [Ô][h]:mm:ss;@[Ô]
ai aceita maior que 24 horas, como colocar isso no vb6 ?
nao existe forma de formatar no vb 6 para que a soma de horas se superior em 23:59:59.
o que pode ser feito é se passou do dia so + 24 horas.
o que pode ser feito é se passou do dia so + 24 horas.
Tópico encerrado , respostas não são mais permitidas