簡體   English   中英

傳入null日期的Excel VBA函數會導致#VALUE! 錯誤

[英]Excel VBA function passing in null date causes #VALUE! error

我有一個VBA函數(DecTime),我調用傳遞一個單元格的值。 單元格格式為自定義hh:mm

在我的單元格中公式為“= DecTime(M6)”

如果M6是時間,例如01:05然后它工作正常,如果它是null然后我得到#VALUE!

我相信這是一個簡單的解決方案,但花了最后一小時從這里嘗試了很多東西和谷歌我感到困惑!

這是我的功能:

    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,如果單元格為空或不包含日期,您可以使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM