0

以下のコードは一種の期間計算を行っていますが、実行時にtype mismatch両方のパラメーターがそれらのdate values中にあるにもかかわらず、例外をスローしています.バグがどこにあるのか提案はありますか?

コード:

Function TimeSpan(dt1,dt2)
Dim dtTemp

objExcel1.Application.ScreenUpdating = False
    If (IsDate(dt1) And IsDate(dt2)) = False Then
        TimeSpan = "00:00:00"
        Exit Function
    End If

    If dt2 < dt1 Then
        dtTemp = dt2
        dt2 = dt1
        dt1 = dt2
    End If
    '-- since you only had days, I have put up to days here. 
    '-- if you require months, years you may use yy:mm:dd:hh:mm:ss
    '-- which is pretty self-explainatory ;)
    Msgbox("DT2:" & dt2 & "DT1:" & dt1)
    TimeSpan = objExcel1.Application.WorksheetFunction.Text((dt2 - dt1), "[h]:mm:ss")'"dd:hh:mm:ss"

objExcel1.Application.ScreenUpdating = True
End Function

Calle によって渡されるパラメーターへの日付値

日付エラー

@Tomalak私はあなたのようにコードを更新しましたが、現在エラーを下回っています。

コード

Function TimeSpan(dt1, dt2)
    If Not (IsDate(dt1) And IsDate(dt2)) Then

        TimeSpan = "00:00:00"

    ElseIf dt2 < dt1 Then

        TimeSpan = TimeSpan(dt2, dt1)

    Else

        MsgBox((CDate(dt1) - CDate(dt2)))
        TimeSpan = objExcel1.Application.WorksheetFunction.Text( (CDate(dt1) - CDate(dt2)), "[h]:mm:ss" )

    End If  

End Function

Msgbox Displaying:

ここに画像の説明を入力

新しいエラー

4

2 に答える 2

2

DateDiff()生活をよりシンプルにする機能が利用可能です。

 Function TimeSpan(dt1, dt2)

    If Not (IsDate(dt1) And IsDate(dt2)) Then
        TimeSpan = "00:00:00"
    Else
       TimeSpan = Abs(DateDiff("s", dt2, dt1)) / 3600
         TimeSpan = TimeSpan / 24
    End If

 MsgBox (TimeSpan)

結果は日単位であり、必要な (分と秒) 精度と日付形式との互換性を実現するために秒から再計算されます。

于 2012-12-28T17:11:12.190 に答える
2

これは単なる推測ですが、値は文字列値である可能性があります。IsDate() は、値が日付に変換できる文字列である場合に true を返します。ただし、その場合、減算は失敗します。CDate() または CVDate() 関数を使用して修正できます。

TimeSpan = objExcel1.Application.WorksheetFunction.Text((CDate(dt2) - CDate(dt1)), "[h]:mm:ss")'"dd:hh:mm:ss"

「取得できません...」エラーを回避するには、次のことを試してください。

Dim bSign
bSign = CDate(dt2) < CDate(dt1)
TimeSpan = objExcel1.Application.WorksheetFunction.Text(Abs(CDate(dt2) - CDate(dt1)), "[h]:mm:ss")'"dd:hh:mm:ss"
If bSign Then
    TimeSpan = "-" & TimeSpan
End If    
于 2012-12-28T08:22:50.393 に答える