ДОСТУП К VBA: ошибка времени выполнения 94 недопустимое использование null

#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 игнорируется?