Página 1 de 1

Registro Entrada e Hora Extra

Enviado: Seg Ago 19, 2019 8:37 pm
por Valderei
Olá pessoal, tudo bem.
Preciso de mais uma ajuda dos senhores com duas questões de VBA.
Como todos sabemos, trabalhar com horas e datas no #excel é sempre um pouco mais complicado do que parece.
Eu tenho um formulário, onde registro alguns atendimentos de pós-vendas onde trabalho e gostaria de poder controlar as horas dispendidas nestes trabalhos, minha ideia é a seguinte:

01 textbox registra a entrada pela manhã;
01 textbox registra a saída do almoço;
01 textbox registra a entrada da tarde;
01 textbox registra a saída do fim do dia;
01 textbox registra a soma destes horários e outro fará a contagem das horas extras.

Imagem

Algumas coisas já estão andando, a parte de entradas e saídas, porém preciso fazer algo que, ao passar de 08:48 horas, seja exibido este valor excedido no textbox de hora extra.

Vou compartilhar um arquivo, onde estão as textboxes e os códigos que montei até o momento.
Outra situação, é que no textbox de saída para almoço, se colocar 12:00, o excel entende como meia noite e fica 00:00, alguém sabe como resolver isso, mas sem adicionar o AM/PM?

Obrigado e desculpe pelo textão!!!

Re: Registro Entrada e Hora Extra

Enviado: Ter Set 03, 2019 10:29 pm
por Valderei
Boa noite pessoal!!
Desculpe ser chato e insistente, mas alguém tem uma ideia de como contornar minha situação?
Obrigado.

Re: Registro Entrada e Hora Extra

Enviado: Ter Set 03, 2019 11:03 pm
por Rafael Monteiro
Boa noite Valderei, eu já montei um projeto de cálculo de horas. Entrada, almoço, retorno e Saída. E tinha também o cálculo de hora extra. Posso lhe passar umas ideias. Amanhã te dou um retorno.
ABS.

Re: Registro Entrada e Hora Extra

Enviado: Qui Set 05, 2019 11:31 am
por Valderei
Olá Rafael, muito obrigado pelo retorno.
Sei que o Excel eh um tanto "chato" para trabalhar com horas, ficarei muito agradecido pela sua ajuda.

Abraço .

Re: Registro Entrada e Hora Extra

Enviado: Qui Set 05, 2019 5:19 pm
por Reinaldo
Não entendi sua demanda:
"...ao passar de 08:48 horas..."
Em que momento essa "comparação" deve ser feita?
Se o valor for maior que o esperado; por exemplo 8:52; o que fazer ? TextTotal= 8:48 e textExtra= 0:04?
"... se colocar 12:00..."
Não consegui reproduzir o reportado, em seu modelo digitando 12:00, o text permanece como 12:00

Como é feita sua entrada de dados?

Re: Registro Entrada e Hora Extra

Enviado: Qui Set 05, 2019 7:30 pm
por Valderei
Reinaldo, boa noite.
Então, no exemplo eu apenas deixei a parte do código que estou montando, mas a base toda, é feita sobre o modelo do Tomás.
Desta forma, sempre que digito "12:00", ele é exibido no textbox, porém ao salvar na planilha e reabrir o formulário, o horário altera para "00:00".

Sobre o Textbox de hora extra, a resposta é sim, eu gostaria que ele já assumisse os valores superiores à 08:48, conforme você postou:
Textbox01 = 08:52
Textbox02: 00:04

Montei algo que poderá ajudar, ele já tem os dados na planilha e carrega os mesmos para ela, onde pode ser visto o erro das 12:00 horas.

Reinaldo, obrigado por tirar este tempo para me responder.

Re: Registro Entrada e Hora Extra

Enviado: Sex Set 06, 2019 5:21 pm
por Reinaldo
experimente

"...e reabrir o formulário..."
altere a linha o retorno da planilha (para o item com "problema" ou todos de horas)
de Me.TextBoxSaida01.Text = .Cells(indiceRegistro, colSaida01).value
para:Me.TextBoxSaida01.Text = TimeValue(.Cells(indiceRegistro, colSaida01).Text)
Para as horas experimente:
altere rotina TextBoxSaida02_Exit para:

Código: Selecionar todos

Private Sub TextBoxSaida02_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBoxSaida02.Text <> vbNullString Then
        TextBoxSaida02.Text = Format(CDate(TextBoxSaida02.Text), "hh:mm")
    Else: TextBoxSaida02.Value = "00:00"
    End If
End Sub
adicione a seguinte rotina:

Código: Selecionar todos

Private Sub TextBoxSaida02_AfterUpdate()
Dim horasDecorridas As String
    'Efetuar diferença entre hora de saida e hora de entrada, descontando o intervalo
horasDecorridas = TimeValue(TextBoxSaida02.Text) - TimeValue(TextBoxEntrada02.Text) + (TimeValue(TextBoxSaida01.Text) - TimeValue(TextBoxEntrada01.Text))
    TextBoxHora01.Text = Format(horasDecorridas, "hh:mm")
End Sub{/code]

altere a rotina TextBoxHora01_Change conforme abaixo
[code]Private Sub TextBoxHora01_Change()
    If TextBoxHora01.Text <> vbNullString Then
        If TimeValue(TextBoxHora01) > TimeValue("08:48") Then
            TextBoxExtra01 = Format(TimeValue(TextBoxHora01.Text) - TimeValue("08:48"), "hh:mm")
            TextBoxHora01.Text = "08:48"
        End If
    Else
        TextBoxHora01.Text = Format(CDate(TextBoxHora01.Text), "hh:mm")
    End If
End Sub

Re: Registro Entrada e Hora Extra

Enviado: Sáb Set 07, 2019 6:18 pm
por Valderei
Reinaldo escreveu:
Sex Set 06, 2019 5:21 pm
experimente

"...e reabrir o formulário..."
altere a linha o retorno da planilha (para o item com "problema" ou todos de horas)
de Me.TextBoxSaida01.Text = .Cells(indiceRegistro, colSaida01).value
para:Me.TextBoxSaida01.Text = TimeValue(.Cells(indiceRegistro, colSaida01).Text)
Para as horas experimente:
altere rotina TextBoxSaida02_Exit para:

Código: Selecionar todos

Private Sub TextBoxSaida02_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBoxSaida02.Text <> vbNullString Then
        TextBoxSaida02.Text = Format(CDate(TextBoxSaida02.Text), "hh:mm")
    Else: TextBoxSaida02.Value = "00:00"
    End If
End Sub
adicione a seguinte rotina:

Código: Selecionar todos

Private Sub TextBoxSaida02_AfterUpdate()
Dim horasDecorridas As String
    'Efetuar diferença entre hora de saida e hora de entrada, descontando o intervalo
horasDecorridas = TimeValue(TextBoxSaida02.Text) - TimeValue(TextBoxEntrada02.Text) + (TimeValue(TextBoxSaida01.Text) - TimeValue(TextBoxEntrada01.Text))
    TextBoxHora01.Text = Format(horasDecorridas, "hh:mm")
End Sub{/code]

altere a rotina TextBoxHora01_Change conforme abaixo
[code]Private Sub TextBoxHora01_Change()
    If TextBoxHora01.Text <> vbNullString Then
        If TimeValue(TextBoxHora01) > TimeValue("08:48") Then
            TextBoxExtra01 = Format(TimeValue(TextBoxHora01.Text) - TimeValue("08:48"), "hh:mm")
            TextBoxHora01.Text = "08:48"
        End If
    Else
        TextBoxHora01.Text = Format(CDate(TextBoxHora01.Text), "hh:mm")
    End If
End Sub

Reinaldo, boa tarde.
Acabo de testar sua instrução e funcionou perfeitamente!!!
Meus parabéns e muito obrigado por ter me ajudado com este dilema...