Ошибка добавления даты при вычитании из 0:00

Я пытаюсь преобразовать столбец с часом по Гринвичу в указанные часовые пояса от пользователя.

Я получаю сообщение об ошибке, когда VBA пытается вычесть 18000 секунд (GMT-5) из 01:00.

Selected_GMT = -18000
CellValue = "1/0/00 01:00"

New_Time = DateAdd("s", Selected_GMT,CellValue)

Эта ошибка возникает из-за того, что VBA не может определить часы до 00:00? Я вычислил секунды для Selected_GMT, как я могу использовать это для определения New_Time?


person Kyle    schedule 30.11.2012    source источник
comment
Вы пробовали использовать "1/1/00 01:00"? Я ожидаю, что дата недействительна с нулевым месяцем.   -  person    schedule 30.11.2012


Ответы (1)


Как было отмечено в комментарии выше, 1/0/00 является недопустимым кодом даты. Однако, даже если это была опечатка в вашем вопросе, тот факт, что в дате используется двухзначный код года, вызывает вопрос: «КАКОЙ год 00?» Извините, если вы уже это знаете, но ниже я извлек краткий обзор того, как работают даты Excel, из того, что я написал в другом месте. Соответствующая часть - «Нулевой день и раньше в Excel»; если «00» на самом деле представляет собой *19*00 в ячейке (как это будет, если вы только что набрали «01:00» в качестве записи ячейки), вы столкнетесь с проблемами вычитание из этого.В этом случае, возможно, явно введите дату и время (возможно, используя текущую дату), но скройте компонент даты с помощью форматирования):

В Excel используется система «последовательности дат», в которой любая дата, используемая в вычислениях, представляется как положительное целое значение. Это целочисленное значение рассчитывается на основе произвольной начальной даты. Добавление целых чисел к определенной порядковой дате перемещает вас вперед по календарю на день за раз, а вычитание целых чисел перемещает вас назад... до тех пор, пока вы не пройдете начальную дату системы порядкового номера и не закончите с отрицательным значением. Время представлено в виде долей дня; 0,25 в 6 утра, 0,5 в полдень, 0,75 в 18:00 и так далее.

Даты Excel

В случае Excel для Windows начальной датой является 1 января 1900 года. То есть, если вы введете значение 1 в ячейку Excel и отформатируете его как дату, вы увидите значение как 1 января 1900 года. 2 будет быть 2 января 1900 года, 3 3 января и так далее. 367 представляет 1 января 1901 года, потому что Excel рассматривает 1900 год как високосный с 366 днями. Другими словами, каждый прошедший полный день добавляет 1 к порядковой дате.

Важно помнить, что вышеизложенное относится только к Excel, а не к Access, SQL Server или другим продуктам баз данных (или Visual Basic, если уж на то пошло). В Access, например, диапазон допустимых дат составляет от 1 января 100 до 31 декабря 9999, тот же диапазон, который может быть сохранен в переменной VB или VBA с типом данных Date.

Excel и Macintosh

В системах Macintosh используется начальная дата 1 января 1904 года, аккуратно обходя проблему високосного года 1900 года. Однако это означает, что между последовательными значениями даты в книге, созданной в Excel для Windows, и в книге, созданной в Excel для Mac, существует расхождение в 4 года. К счастью, в разделе «Инструменты» -> «Параметры» -> «Вычисление» (в версиях Excel до 2007 г.) вы найдете параметр рабочей книги под названием «Система дат 1904 года». Если этот флажок установлен, Excel узнает, что книга была получена с компьютера Macintosh, и соответствующим образом скорректирует расчет даты.

Время Excel

Как отмечалось во введении, время рассчитывается как часть суток. Например, 1,5 представляет полдень 2 января 1900 года. 1,75 представляет 18:00 2 января 1900 года.

(Немного вырезал об ошибке високосного года в 1900 году)

Начиная с 1 марта 1900 г. даты в Excel верны, но если вы отформатируете число 1, используя формат дддд, мммм дд, гггг, вы получите результат воскресенье, 1 января 1900 г. Это неверно; 1 января 1900 года был понедельник, а не воскресенье. Эта ошибка дня недели продолжается до тех пор, пока вы не достигнете 1 марта, что является первой действительно правильной датой в календаре Excel.

Нулевой день и раньше в Excel

Если вы используете нулевое значение и отображаете его в формате даты, вы получите бессмысленную дату в субботу, 0 января 1900 года. Если вы попытаетесь отформатировать отрицательное значение как дату, вы просто получите ячейку, полную решеток. Точно так же, если вы попытаетесь получить порядковый номер даты с помощью функций Excel, таких как DateValue, вы можете сделать это только для дат, начиная с 1 января 1900 года. Попытка указать более раннюю дату приведет к ошибке.

Система 1904 (Macintosh) начинается с нуля. (1 января 1904 года имеет значение 0, а не 1. В интерактивной справке Excel система Mac описывается как начиная со 2 января, но это, вероятно, проще, чем объяснять пользователям, почему последовательное значение даты 0 работает на Mac, но не в Excel. .) Отрицательные числа не вызовут ошибки, но число будет считаться абсолютным. То есть и 1, и -1 будут рассматриваться как 2 января 1904 года.

person Alan K    schedule 30.11.2012