2016-09-18 1 views
0

Excel листа читает 13.40 вечера, но читает 0.569444 УВЫпервенствует лист читает 13.40.pm но читает VBA 0,569444

в ячейке B4 мы имеем 13.40 вечера точно так, как он был введен, мой код, чтобы сравнить это с текущим временем и посмотреть, если мы опаздываем

'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' составляет 820 минут в 1440-минутный день, который работает до 0,569444 –

+0

Попробуйте вариант TimeValue (Формат (sh.Range (« B »& r.row) .Value),« hh: mm ") ... IOW, используйте Format, чтобы вернуть форматированную строку и использовать TimeValue. –

ответ

0

Если вы хотите, чтобы получить TIMEVALUE в ячейке B4, а затем использовать следующую строку:

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

Для отладки цели, используйте строку ниже:

Debug.Print dtstart 

В результате в непосредственном окне 13:40:00

+0

Спасибо Shai Rado, что вы суперзвезда – user3592901

+0

@ user3592901 LOL, пожалуйста, отметьте как ответ –

+0

Зачем вам форматировать значение Date в String, а затем использовать TimeValue для его преобразования в Date? Это эквивалентно чем-то вроде 'CDate (CStr (CDate())). – Comintern

1

Как указано в комментариях 0.569444 is ужеTimeValue. Вы можете опустить все другой код и просто сделать это:

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

типы Дата сохраняется внутри как Excel и VBA как Double. Их можно использовать взаимозаменяемо.

Смежные вопросы