ここに新しい。多くの話題を読むが、本当にこれを理解することはできない。 文字列をuserformテキストボックスから倍精度に変換しています。現在のコードは正常に動作します。VBA Excel TimeValue()入力可能性
Dim startingTime As Double, endingTime As Double
Dim totalTime As Double
On Error Resume Next
With textbox_inMyUserform
TimeValue(.Value)
If Err.Number <> 0 Then
startingTime = CDbl(.Value)
Err.Clear
On Error GoTo 0
Else
On Error GoTo 0
startingTime = 24 * TimeValue(.Value)
End If
End With
形式が正しいかどうかをチェックします。エラーがない場合は関数が他の関数で使用され、エラーの場合は通常のCdbl(.value)が実行されます。
小数点以下は小数点以下桁違いに誤って表示されません。 TimeValueのエラーのために "5"が5になると、TimeValueのエラーは発生しませんが、 "5.5"と "5,5"は5.0833333と0のそれぞれの結果を与えるエラーを引き起こさないため、 "5:30"は5,5になります。 TimeValue(.value)。私はそれらの文字列にエラーが予想されますか?
私の解決策は、小数点以下を使用しないことですが、何が間違っているのか分かりません。
ありがとうございました。だから私はそれが動作するようになったSlaiの回答に基づいて
更新
。どうやら、VBAのTimeValue()とExcelのTIMEVALUE()の動作は異なっています。また、私は後ろに「ないISERROR()場合は、」私は当初予定置く
Dim startingTime As Double, endingTime As Double
Dim totalTime As Double
With textbox_starttijd
If Not IsError(Evaluate("TIMEVALUE(""" & .Value & """)")) Then
startingTime = 24 * TimeValue(.Value)
ElseIf .Value <> vbNullString Then
startingTime = CDbl(.Value)
Else
startingTime = 0
End If
End With
With textbox_eindtijd
If Not IsError(Evaluate("TIMEVALUE(""" & .Value & """)")) Then
endingTime = 24 * TimeValue(.Value)
ElseIf .Value <> vbNullString Then
endingTime = CDbl(.Value)
Else
endingTime = 0
End If
End With
totalTime = endingTime - startingTime
アップデート2
にも最新の状態にこのコードを保つことがあります。ユーザーフォーム内の空のテキストボックスがでエラーがスローされます " CDbl(.value) 'であるため、上記のコードをvbNullStringをチェックするElseIfで更新しました。Elseは私の時間を0に設定して、文字列が空になることはありません。
テキストボックスに時間値を入力するだけの理由はありますか? –