#vba #ms-access
#vba #ms-access
Вопрос:
Private Function getTMD(StartDate, EndDate, StartHour, EndHour) As Double
Dim tempTMD As Integer
tempTMD = 0
diffDate = (EndDate - StartDate) - 1
If diffDate >= 1 Then
tempTMD = diffDate * (1080)
If TimeValue(StartHour) > TimeValue("06:00:00") Then
tempTMD = tempTMD DateDiff("n", TimeValue(StartHour), TimeValue("23:59:59")) 1
Debug.Print tempTMD
Else
tempTMD = 1080 tempTMD
End If
If (TimeValue(EndHour) > TimeValue("06:00:00") And TimeValue(EndHour) <> TimeValue("23:59:00")) Then
tempTMD = DateDiff("n", TimeValue("06:00:00"), TimeValue(EndHour)) tempTMD
ElseIf TimeValue(EndHour) = TimeValue("23:59:00") Then
tempTMD = tempTMD 1079
End If
ElseIf diffDate = 0 Then
If TimeValue(StartHour) > TimeValue("06:00:00") Then
tempTMD = DateDiff("n", TimeValue(StartHour), TimeValue("23:59:59")) 1 tempTMD
Else
tempTMD = DateDiff("n", TimeValue("06:00:00"), TimeValue("23:59:59")) 1 tempTMD
End If
If TimeValue(EndHour) > TimeValue("06:00:00") And TimeValue(EndHour) <> TimeValue("23:59") Then
tempTMD = DateDiff("n", TimeValue("06:00:00"), TimeValue(EndHour)) tempTMD
ElseIf TimeValue(EndHour) = TimeValue("23:59:00") Then
tempTMD = tempTMD 1079
End If
ElseIf diffDate = -1 Then
If TimeValue(EndHour) > TimeValue("06:00:00") And TimeValue(StartHour) > TimeValue("06:00:00") Then
tempTMD = DateDiff("n", TimeValue(StartHour), TimeValue(EndHour))
ElseIf TimeValue(EndHour) > TimeValue("06:00:00") And TimeValue(StartHour) <= TimeValue("06:00:00") Then
tempTMD = DateDiff("n", TimeValue("06:00:00"), TimeValue(EndHour))
End If
End If
getTMD = Round((tempTMD / 60), 2)
End Function
У меня есть эта функция, но у меня ошибка в строке
If (TimeValue(EndHour) > TimeValue("06:00:00") And TimeValue(EndHour) <> TimeValue("23:59:00")) Then
tempTMD = DateDiff("n", TimeValue("06:00:00"), TimeValue(EndHour)) tempTMD
Я пытался использовать функцию NZ, но все равно ошибка есть. можете ли вы помочь мне решить ее.?
Комментарии:
1. Как именно вы использовали Nz() — Nz(EndHour, 0) ?
Ответ №1:
Во-первых, это произойдет, если вы передадите функции значения Null.
Чтобы избежать этого, объявите их как Date:
Private Function getTMD(StartDate As Date, EndDate As Date, StartHour As Date, EndHour As Date) As Double
и, если значения могут быть Null, решите, какое значение заменить, используя Nz, например:
Value = getTMD(Nz(StartDate, #00:00#), Nz(EndDate, #00:00#), Nz(StartHour, #00:00#), Nz(EndHour, #00:00#))
Далее, то, что вы делаете, кажется слишком сложным, возможно, из-за использования магических чисел. Если вы попытаетесь объяснить на простом английском языке, что делает функция, возможно, удастся ее значительно сократить.
Комментарии:
1. Спасибо, в этой функции просматриваются файлы с датой, если они не относятся к одному и тому же месяцу, они должны разделяться на две записи, например, 30/06/2020 в 5:35 вечера до 2/7/2020 в 14:25 должны быть в двух записях: 30/06/2020 в 5:35 вечера до 30/6/2020 в 23:59 и 02.07/2020 вс 12:00 утра до 2/7/2020 в 14:25 .
2. Это может быть только частью истории. Откуда берется отрицательный счет? Я думаю, конечная дата не может быть раньше начальной. Что это с # 06:00 и 1080? И, в вашем примере, почему 2020-07-01 игнорируется?