SUBTRAIR HORAS
Pessoal, tenho um text que contem a carga horaria do mes, e outro contem quanto deveria ser esta carga horaria, quero sbtrair esta carga horaria para obter as horas extra do mes
ex: txt_horas_atrabalhar.text = [Ô]180:00:00[Ô]
ex: txt_horas_trabalhadas.text = [Ô]181:40:23[Ô]
Então queria o resultado de txt_horas_atrabalhar.text - txt_horas_trabalhadas.text
Vlw!
ex: txt_horas_atrabalhar.text = [Ô]180:00:00[Ô]
ex: txt_horas_trabalhadas.text = [Ô]181:40:23[Ô]
Então queria o resultado de txt_horas_atrabalhar.text - txt_horas_trabalhadas.text
Vlw!
TextBox1.text = Format(TimeValue([Ô]180:00:00[Ô]) - TimeValue([Ô]181:40:23[Ô]), [Ô]hh:mm:ss[Ô])
Tente assim
Private Sub Command1_Click()
Dim aTrabalhar() As String
Dim Trabalhadas() As String
Dim Extras(3) As Integer
aTrabalhar = Split(txt_horas_atrabalhar.Text, [Ô]:[Ô])
Trabalhadas = Split(txt_horas_trabalhadas.Text, [Ô]:[Ô])
For F = 0 To 2
If aTrabalhar(F) < Trabalhadas(F) Then
Extras(F) = CInt(Trabalhadas(F)) - CInt(aTrabalhar(F))
End If
Next F
MsgBox Extras(0) & [Ô]:[Ô] & Format(Extras(1), [Ô]00[Ô]) & [Ô]:[Ô] & Format(Extras(2), [Ô]00[Ô])
End Sub
Só uma observação o TimeValue não vai trabalhar com horas maiores que 24
Putz, é verdade Marcelo, viajei...
Da forma que fiz não funciona para horas maiores que 23:59:59 que corresponde a 01 dia.
Da forma que fiz não funciona para horas maiores que 23:59:59 que corresponde a 01 dia.
no código eu verifico se a hora trabalhada é maior que as horas a trabalhar, do contrário não seria extra, ou seria?
entendi o problema
código alterado
a logica é a seguinte, as horas trabalhadas devem ser maior que as horas A trabalhar, para se retornar as extra do contrario, retornará 00:00:00 ou seja nenhuma extra
código alterado
Private Sub Command1_Click()
Dim aTrabalhar() As String
Dim Trabalhadas() As String
Dim Extras(3) As Integer
aTrabalhar = Split([Ô]180:00:00[Ô], [Ô]:[Ô])
Trabalhadas = Split([Ô]179:00:23[Ô], [Ô]:[Ô])
If aTrabalhar(0) <= Trabalhadas(0) Then
Extras(0) = CInt(Trabalhadas(0)) - CInt(aTrabalhar(0))
If aTrabalhar(1) <= Trabalhadas(1) Then
Extras(1) = CInt(Trabalhadas(1)) - CInt(aTrabalhar(1))
If aTrabalhar(2) <= Trabalhadas(2) Then
Extras(2) = CInt(Trabalhadas(2)) - CInt(aTrabalhar(2))
End If
End If
End If
MsgBox Extras(0) & [Ô]:[Ô] & Format(Extras(1), [Ô]00[Ô]) & [Ô]:[Ô] & Format(Extras(2), [Ô]00[Ô])
End Sub
a logica é a seguinte, as horas trabalhadas devem ser maior que as horas A trabalhar, para se retornar as extra do contrario, retornará 00:00:00 ou seja nenhuma extra
MARCELO-TREZE,
Ficou Bacana, mas eu prescizaria saber se o funcionario esta me devendo horas tbm, não somente as horas extras, ai tirei os if do cod e funcionou mas porem so que tem um detalhe, se eu coloco 180:00:00 a trabalhar e coloco que ele trabalhou 179:30:10 o resultado é 01:30:10 sendo que o correto seria 00:30:50, teria algo a fazer para que fique desta forma? grato!
Ficou Bacana, mas eu prescizaria saber se o funcionario esta me devendo horas tbm, não somente as horas extras, ai tirei os if do cod e funcionou mas porem so que tem um detalhe, se eu coloco 180:00:00 a trabalhar e coloco que ele trabalhou 179:30:10 o resultado é 01:30:10 sendo que o correto seria 00:30:50, teria algo a fazer para que fique desta forma? grato!
to refazendo
novo código
Private Sub Command1_Click()
Dim aTrabalhar() As String
Dim Trabalhadas() As String
Dim TotalEmSegundosAT As Long
Dim TotalEmSegundosTB As Long
Dim ResultadoSegundos As Long
Dim Seg As Long
Dim Min As Integer
Dim Hor As Integer
aTrabalhar = Split([Ô]180:00:00[Ô], [Ô]:[Ô])
Trabalhadas = Split([Ô]179:30:23[Ô], [Ô]:[Ô])
TotalEmSegundosAT = (aTrabalhar(0) * 3600) + (aTrabalhar(1) * 60) + aTrabalhar(2)
TotalEmSegundosTB = (Trabalhadas(0) * 3600) + (Trabalhadas(1) * 60) + Trabalhadas(2)
ResultadoSegundos = TotalEmSegundosTB - TotalEmSegundosAT
Seg = ResultadoSegundos Mod 60
Min = ((ResultadoSegundos - Seg Mod 3600) / 60)
Hor = ((ResultadoSegundos - Min) - Seg) / 3600
If ResultadoSegundos < 0 Then
MsgBox [Ô]O funcionario deve [Ô] & Hor & [Ô]:[Ô] & Format(Abs(Min), [Ô]00[Ô]) & [Ô]:[Ô] & Format(Abs(Seg), [Ô]00[Ô]) & [Ô] horas[Ô]
Else
MsgBox [Ô]O funcionario fez [Ô] & Hor & [Ô]:[Ô] & Format(Abs(Min), [Ô]00[Ô]) & [Ô]:[Ô] & Format(Abs(Seg), [Ô]00[Ô]) & [Ô] horas Extras[Ô]
End If
End Sub
Cara, la vem eu Amolar,rsrs
tenta mudar a hora Trabalhadas ex: = Trabalhadas = Split([Ô]178:30:23[Ô], [Ô]:[Ô]) POR Trabalhadas = Split([Ô]177:30:23[Ô], [Ô]:[Ô])
o resultado esta dando certo nas horas e nos segundos mas os minutos ficam assim 149, ou 87, e tinha que ir até 60!
olha ai e me fala aki... vlw!!!!
tenta mudar a hora Trabalhadas ex: = Trabalhadas = Split([Ô]178:30:23[Ô], [Ô]:[Ô]) POR Trabalhadas = Split([Ô]177:30:23[Ô], [Ô]:[Ô])
o resultado esta dando certo nas horas e nos segundos mas os minutos ficam assim 149, ou 87, e tinha que ir até 60!
olha ai e me fala aki... vlw!!!!
Tópico encerrado , respostas não são mais permitidas