在空date传递的Excel VBA函数导致#VALUE! 错误

我有一个VBA函数(DecTime),我调用传递一个单元格的值。 单元格格式化为自定义hh:mm

在我的单元格中的公式是“= DecTime(M6)”

如果M6是一个时间,例如01:05,那么它工作正常,如果它是null,那么我得到#VALUE!

我相信这是一个简单的解决scheme,但花了最后一个小时尝试从这里很多东西,谷歌我很困惑!

这是我的function:

Function DecTime(Optional time As Date = #12:00:00 AM#) As Single 'String Dim Hours As Integer Dim Minutes As Single Dim HoursStr As String Dim arrTime 'On Error Resume Next 'On Error GoTo error_handler ' HoursStr = Format(time, "h:mm") ' DecTime = HoursStr If time = #12:00:00 AM# Then ' If HoursStr = "12:00" Then ' If IsEmpty(time) Then ' If IsEmpty(time) = True Then ' If IsNull(time) Then ' If arrTime.Count = 0 Then ' If InStr(0, time, ":") = 0 Then ' If IsDate(time) = False Then DecTime = 88 ' DecTime = HoursStr Else arrTime = Split(time, ":") If arrTime(1) <= 0 Then Minutes = 0 ElseIf arrTime(1) <= 5 Then Minutes = 0.1 ElseIf arrTime(1) <= 10 Then Minutes = 0.2 ElseIf arrTime(1) <= 15 Then Minutes = 0.3 ElseIf arrTime(1) <= 20 Then Minutes = 0.3 ElseIf arrTime(1) <= 25 Then Minutes = 0.4 ElseIf arrTime(1) <= 30 Then Minutes = 0.5 ElseIf arrTime(1) <= 35 Then Minutes = 0.6 ElseIf arrTime(1) <= 40 Then Minutes = 0.7 ElseIf arrTime(1) <= 45 Then Minutes = 0.8 ElseIf arrTime(1) <= 50 Then Minutes = 0.8 ElseIf arrTime(1) <= 55 Then Minutes = 0.9 Else Minutes = 0 End If Hours = arrTime(0) DecTime = Hours + Minutes ' DecTime = HoursStr End If 'error_handler: ' DecTime = 99 'Resume Next End Function 

在这里输入图像说明

正如你所看到的那样,我已经尝试了很多不同的选项来处理一个空白的参数,所以如果有人能告诉我我做错了什么,我会非常感激!

我是一个SQL程序员,所以没有太多的VB经验

假设你想返回0,如果单元格为空或不包含date,你可以使用:

 Function DecTime(Optional time = #12:00:00 AM#) As Double Dim Hours As Integer Dim Minutes As Single Dim arrTime If Not IsDate(time) Then DecTime = 0 ElseIf time = #12:00:00 AM# Then DecTime = 0 Else arrTime = Split(time, ":") Select Case arrTime(1) Case Is = 0 Minutes = 0 Case Is <= 5 Minutes = 0.1 Case Is <= 10 Minutes = 0.2 Case Is <= 20 Minutes = 0.3 Case Is <= 25 Minutes = 0.4 Case Is <= 30 Minutes = 0.5 Case Is <= 35 Minutes = 0.6 Case Is <= 40 Minutes = 0.7 Case Is <= 50 Minutes = 0.8 Case Is <= 55 Minutes = 0.9 Case Else Minutes = 0 End Select Hours = arrTime(0) DecTime = Hours + Minutes End If End Function