Procurei aqui mas não encontrei nada que me ajudasse, vou tentar colocar de uma forma mais simples para entendimento.
Estou precisando fazer alocação de horas em uma determinada maquina.
Para isso tenho o tempo de operação, baseada na quantidade a ser produzida nessa maquina, por exemplo, tenho a hora padrão para uma peça. Multiplico pelo numero de peças do pedido, e isso me dá um tempo no formato hh:mm:ss -> 00:50:00 (50 minutos).
Meu processo começa em uma data e hora especifica, exemplo no formato que coloquei ( 04/01/2016 07:00) somando o total de horas da operação (00:50:00), ele me retorna o valor: (04/01/2016 07:50). até aqui tudo bem, o problema começa quando esse valor ultrapassa as 17:00 (fim de expediente).
Tenho como variáveis:
Inicio de Turno: 07:00 (de qualquer dia)
Final de Turno: 17:00 (de qualquer dia)
Semana de trabalho de segunda a sexta.
Tempo de operação = Setup + Tempo de processo
Usei o seguinte código (inacabado), pois ele me retorna valores, considerando o turno como 24h e 7 dias por semana. o Código está em módulo 2.
Public Sub horaInicio()
Dim I As Integer, inicioHora As Date
Dim finhora As Date, disponibilidade As Date
Dim oF As Long, tempo As Double, setup As Double
Dim paineis As Long, inicioTurno As Double, finTurno As Double
Dim daysProc As Double, finHora1 As Date, finHora2 As Date
Dim Feriado As Double, weekdays As Double
ThisWorkbook.Worksheets("Corte").Activate
'Selecionar a célula I3
Range("I3").Select
'Formula para preenchimento da celula I3(por não ter como medir a variavel
Range("I3") = Range("H3") + 0.2916666667
For I = 0 To 10000 Step (1)
inicioHora = Range("I3").Offset(I, 0).Value ' Me retorna o Inicio da operação, celula I3 eu coloquei digitada como 04/01/2016 07:00
finhora = Range("J3").Offset(I, 0).Value ' Me retorna o valor do final da operação, considerando a execução (tempo+Setup) e serve como inicio de outro produto
disponibilidade = Range("H3").Offset(I, 0).Value' Data onde o material está disponivel para execução
inicioTurno = Round(disponibilidade, 0) + 0.29167
finTurno = Round(inicioHora, 0) + 0.70834
paineis = Range("D3").Offset(I, 0).Value
setup = Range("F3").Offset(I, 0).Value
tempo = Range("G3").Offset(I, 0).Value / 24
daysProc = ((setup + tempo) / 8.8) * 24
If disponibilidade > 0 Then
finhora = setup + tempo + inicioHora
If finhora > Round(inicioHora, 0) + 0.70834 Then
finhora = Round(finhora, 0) + daysProc - (finhora - inicioHora)
Range("J3").Offset(I, 0).Value = finhora
Else: Range("J3").Offset(I, 0).Value = finhora
End If
Else: Exit For
End If
If disponibilidade > 0 And finhora > disponibilidade Then
Range("I3").Offset(I + 1, 0).Value = finhora
Range("I3").Offset(I + 1, 0).Activate
Else: inicioHora = disponibilidade + 0.2917
Range("I3").Offset(I + 1, 0).Activate = inicioHora
End If
Debug.Print inicioHora, finHora2
Next I
End Sub
Vou colocar a Planilha para verificação... note que esse codigo VBA ainda é um rascunho, com algumas falhas, a serem revisadas posteriormente.
Postado : 18/01/2016 11:44 am