Похоже, что вы добавляете только время, когда minTest = 30
, но это значение, вероятно, сильно меняется.Кроме того, в одном случае вы сравниваете строку, а в другом число при ссылке на unFmtStartDuration
, что может работать, но сбивает с толку при чтении вашего кода.
Чтобы следовать вашему текущему методу, используйте
startDuration = Val(unFmtStartDuration(0) + Round(Val(unFmtStartDuration(1)) / 60, 2)
, чтобы заменить это
startDuration = unFmtStartDuration(0)
If unFmtStartDuration(1) = "00" Then
minTest = 0
Else
minTest = unFmtStartDuration(1)
If minTest = 30 Then
startDuration = startDuration + 0.5
End If
End If
Это займет любое время и преобразует его в десятичную форму, в которой вы находитесьиспользуя вместо того, чтобы полагаться на совпадение 30
.(Если вам это не нужно конкретно. Если это так, скажите так, поскольку я думаю, что это все еще можно организовать с помощью трюков с округлением.)
Однако я думаю, что лучшим вариантом будет использование
startDuration = TimeValue(cboStartTime.Text) * 24
Таким образом, никакие другие математические операции или проверки не требуются.
Кроме того, если cboStartTime.Text
(а затем startDuration
) больше 24 часов, этот
startDate = DateValue(DateAdd("h", startDuration, cboDate.Text & " 12:00AM"))
всегда будет возвращатьдата указана в cboDate.Text
с подразумеваемым 12: 00: 00 AM .Чтобы исправить это, вам нужно изменить на
startDate = DateAdd("h", startDuration, cboDate.Text & " 12:00AM")
Я думаю, что есть еще кое-что исправить, но, надеюсь, это заставит вас двигаться в правильном направлении ...