Есть ли функция VBA, которая позволяет мне устанавливать количество часов в день менее 24 часов? - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать цикл VBA, который будет проходить через набор заказов.Для каждого заказа у меня есть продолжительность в часах.Для каждой записи добавляется продолжительность к дате начала и создается время даты окончания.Время конечной даты будет временем начальной даты следующей записи и т. Д.

У меня это работает с использованием функции dateadd, но это предполагает, что производство происходит 24 часа в сутки.

Как я могу указать, что мы работаем, например, только 12 часов в день, поэтому любая работа, которая выходит за рамки, скажем, 7 вечера, будет распространяться на следующий день?

Я пытался использоватьdateadd в цикле, и это работает, но я не могу указать 12 часов в день

Set rs = db.OpenRecordset("Select * from Combined_Prod_PO_2_T ORDER BY SEQ")

'Define Changeover master as RefChangeover recordset
Dim EffStart_DateTime As Date
Dim EffEnd_DateTime As Date
Dim FamFrom As String
Dim FamTo As String
Dim changeover As Double
Dim RefChangeover As Recordset

'rs.OpenRecordset
rs.MoveFirst
Do Until rs.EOF
    EffEnd_DateTime = rs.Fields("EFFEND_DATETIME")
    FamFrom = rs.Fields("PRODUCT_FAMILY")
    Debug.Print FamFrom

    rs.MoveNext
    If Not rs.EOF Then        ' making sure that the "next" line exists i.e. stop at the second last line
        FamTo = rs.Fields("PRODUCT_FAMILY")
        Debug.Print FamTo
        Duration = rs.Fields("DURATION")

        Dim sqlcmd As String
        sqlcmd = "select sum(hrs) from (SELECT hrs from AP_Changeover_Master where [FROM] = '" & FamFrom & "'" & " and [TO] = '" & FamTo & "'" & " union select distinct 0 from AP_Changeover_Master) "

        Debug.Print sqlcmd
        Set RefChangeover = db.OpenRecordset(sqlcmd)
        changeover = RefChangeover.Fields(0).Value
        Debug.Print changeover

        'If Not rs.EOF Then

        rs.Edit
        rs("Effstart_datetime") = EffEnd_DateTime
        rs("EffEnd_DateTime") = DateAdd("n", (Duration + changeover) * 60, EffEnd_DateTime)
        rs("changeover") = changeover
        rs.Update
    End If
Loop
rs.Close
Set rs = Nothing

1 Ответ

1 голос
/ 29 мая 2019

Когда значение DateTime превышает 12 часов, вы можете разделить это значение на 2.

Время начала = 05/01/2019 8:00 AM Время окончания = 05/02/2019 8:00 AM

Общее время здесь составляет 24 часа.Но так как вы работаете только 12 часов, деление на 2 даст вам 12 часов.

Если вы работали 8 часов в сутки, вы можете разделить на 3, чтобы получить только 8 часов и т. Д.

Имейте в виду, что ваше значение в этом решении будет в десятичном формате, а не вФормат времени

Dim ActualTimeTaken as Decimal

rs.Edit

If rs.("YourTimeTaken").value > 12 Then

    ActualTimeTaken = rs.("YourTimeTaken").Value / 2
    'Do whatever you need here.


End If

rs.Update
...