2016-09-18 6 views
0

Excelシートは13.40 PMを読み込み、読み込みが、VBAは、我々はそれが入力したものと同じ13.40 PMを持つセルB4に0.569444Excelシートは13.40.pmを読み取りますが、VBAは0.569444

を読み、私のコードは、現在の時刻とこれを比較するとどうかを確認します私たちは遅いです

'sh is a variable pointing at my sheet 
'dt is a date type 

dtstart = TimeValue(sh.Range("B" & r.row).Value) 
dbInterval = dtOff - Time 

私はそれが文字列を期待していると思うので、timevalue()から型の不一致エラーが発生します。 Cstr(mycell)は役に立ちません この番号は私にとって論理的ではありません。 シートに既に入っているデータが残っていて、別のスクリプトでそこに配置されています 誰でも?

+3

Excelは日付と時刻を浮動小数点値として格納します。 「13:40」は1440分の日に820分になります.0569444になります –

+0

TimeValue(Format(sh.Range( "B"&r.row).Value)、 "hh: mm ")... IOW、Formatを使用してフォーマットされた文字列を返し、その上でTimeValueを使用します。 –

答えて

0

あなたはセルB4内のTimeValueを取得したい場合は、その行以下を使用します。イミディエイトウィンドウに結果が13:40:00ある

Debug.Print dtstart 

:以下の行を使用し、

dtstart = TimeValue(Format(sh.Range("B" & r.Row).Value, "hh:mm")) 

デバッグ目的のために

+0

ありがとうShai Radoあなたはスーパースターです – user3592901

+0

@ user3592901 LOL、答えとしてマークしてください –

+0

Date値をStringにフォーマットし、TimeValueを使ってDateに変換するのはなぜですか?これは 'CDate(CStr(CDate()))'のようなものです。 – Comintern

1

0.569444であり、すでにであるTimeValue。あなたは、他のすべてのコードを省略し、単にこれを行うことができます。

dtstart = Range("B" & r.row).Value 

日付タイプはDoubleとしてExcelとVBAの両方に内部的に保存されています。それらは互換的に使用することができます。

関連する問題