Notifications
Clear all

Somatório e Multiplicação de Horas - VBA

5 Posts
2 Usuários
0 Reactions
1,760 Visualizações
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Bom dia amigos,

estou emitindo um relatório de carga horária trabalhada, a idéia é que a cada escrita de hora no arquivo, ele vá somando a carga horária em somacargahoraria .

O código que estou utilizando é somacargahoraria = somacargahoraria + ListBox1.Column(5, i)

Depois disso preciso saber como devo fazer para multiplicar hora, pois a carga horária dos funcionários é de 09:00:00 por dia, a cada ocorrencia positiva o sistema acumulará a quantidade de dias trabalhados e depois multiplicará por 09:00 ('ts.WriteLine "CARGA HORÁRIA ESPERADA: " & diastrabalhados *(09:00:00)) isso não está funcionando.

Forte abraço a todos!

Segue abaixo código completo:

Private Sub CommandButton2_Click()
Const FOR_READING = 1
Const FOR_WRITING = 2
Const FOR_APPENDING = 8
Dim fso As Object
Dim ts As Object
diastrabalhados = 0

Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("E:Arquivos AQUINova Planilha Revenda PrintSistema V2FolhadePonto" & funcionario.Value & " - " & Format(Date, "dd-mm-yyyy") & ".txt", FOR_WRITING, True)

ts.WriteLine "================================================================================================="
ts.WriteLine ""
ts.WriteLine "                                                                                          FOLHA DE PONTO"
ts.WriteLine "                                                GERAÇÃO DO RESUMO DE: 01/" & Format(mes.Value, "00") & "/2012 - FUNCIONÁRIO: " & funcionario.Value
ts.WriteLine ""
ts.WriteLine "================================================================================================="
ts.WriteLine ""
ts.WriteLine "                                     " & ListBox1.Column(0, 0) & "             | " & ListBox1.Column(1, 0) & " | " & ListBox1.Column(2, 0) & "| " & ListBox1.Column(3, 0) & "| " & ListBox1.Column(4, 0) & "     | " & ListBox1.Column(5, 0) & "| " & ListBox1.Column(6, 0)
ts.WriteLine ""
    For i = 1 To ListBox1.ListCount - 1
        ts.WriteLine "                                     " & ListBox1.Column(0, i) & "| " & ListBox1.Column(1, i) & " | " & ListBox1.Column(2, i) & "| " & ListBox1.Column(3, i) & "| " & ListBox1.Column(4, i) & " | " & ListBox1.Column(5, i) & "| " & ListBox1.Column(6, i)
        somacargahoraria = somacargahoraria + ListBox1.Column(5, i)
        diastrabalhados = diastrabalhados + 1
    Next
ts.WriteLine "================================================================================================="
ts.WriteLine "CARGA HORÁRIA MENSAL: " & somacargahoraria
'ts.WriteLine "CARGA HORÁRIA ESPERADA: " & diastrabalhados *(09:00:00)
ts.WriteLine "================================================================================================="

Dim ValorDeRetorno As Integer
    ValorDeRetorno = Shell("C:WINDOWSNOTEPAD.exe E:Arquivos AQUINova Planilha Revenda PrintSistema V2FolhadePonto" & funcionario.Value & " - " & Format(Date, "dd-mm-yyyy") & ".txt", 1)
    AppActivate ValorDeRetorno
    SendKeys "%A", True
    SendKeys "I", True

End Sub

 
Postado : 26/04/2012 1:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Na verdade basta vc multiplicar normalmente e formatar da seguinte maneira:

[h]:mm:ss

Abs,

 
Postado : 28/04/2012 5:39 pm
(@chook)
Posts: 197
Reputable Member
Topic starter
 

Amigo não consegui desenrolar....

Vamos começar pela a linha abaixo:
Ele escreve em arquivo txt a multiplicação de diastrabalhados x 09:00:00, que é a carga horária diária.

ts.WriteLine "CARGA HORÁRIA ESPERADA: " & diastrabalhados *(09:00:00)

 
Postado : 30/04/2012 5:35 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook,

Saco quase nada de VBA. Mas a lógica é a seguinte-> Vc terá os dias trabalhados (número inteiro, creio). Com este número, vc multiplica por 9 e formata o resultado da forma descrita anteriormente. Acho que, para esta etapa, vc pode deixar o VBA de lado.

Como disse, VBA não é minha praia mas não desista. Tente por fórmula ou aguarde auxílio dos feras em macro aqui no fórum.

Abs,

 
Postado : 03/05/2012 8:56 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Chook
Utilizar valores de horas maior que 24, no vba não funciona como no excel (veja no topico http://www.planilhando.com.br/forum/viewtopic.php?f=10&t=4096); não dá para multiplicar diretamente.
Como o Mandrix muito bem disse, nesses casos e melhor deixar o vb de lado e utilizar as facilidades da planilha.
Mas se quiser utilizar o vb e resultar horas > 24 ter de utilizar algo assim:

Sub AchaHora()
diastrabalhados = 21.45 'Altere aqui o numero de dias que deseja, utilizei "quebrado" para exemplificar
crdia = TimeValue("08:30:04") 'Altere aqui a quantidade de horas diarias, tb quebrado so para exemplificar
tempo = CDec(diastrabalhados * crdia)
hora = Int(tempo * 24) ' calculada qtas horas
Minuto = Int((tempo * 24 - Int(tempo * 24)) * 60) 'calculado qtde minutos
segundo = ((tempo * 24 - Int(tempo * 24)) * 60 - Int((tempo * 24 - Int(tempo * 24)) * 60)) * 60
MsgBox Format(hora, "00") & ":" & Format(Minuto, "00") & ":" & Format(segundo, "00") 'Format(h3 * 24, "#0.0")
End Sub
 
Postado : 03/05/2012 1:00 pm