2016-07-02 2 views
0

Я работаю над сценарием VBA для Excel 2007.Excel 2007 VBA, TimeSerial Функция

Почему TimeSerial (0, -10, 0) возвращает 0:10:00?

Я использую TimeSerial, чтобы вычитать минуты от времени, поэтому он работает во всех случаях. Например, TimeSerial (23, -10,0) корректно возвращает 22:50.

Но когда мое время TimeSerial (0, -10, 0), не должно ли оно возвращаться 23:50:00?

+0

Не положительный, но я не думаю, что TimeSerial рассекречивать вокруг. Что происходит, когда вы пытаетесь «TimeSerial (23, 70, 0)»? Готов поспорить, вы тоже не закончили 0: 10: 0. –

+0

У вас нет компонента даты, и у вас нет отрицательного времени. Лично я предпочел бы, чтобы он выдавал ошибку, но я предполагаю, что это функция функции [TimeSerial] (https://msdn.microsoft.com/en-us/library/ws25fd2z.aspx) для обеспечения результата «наилучшего предположения» , 'TimeSerial (23, -10,0)' работает, потому что принимать 10 минут от 23 часов не приводит к отрицательному результату. @KenWhite - На самом деле вы приедете в '12/31/1899 12:10:00 AM'. – Jeeped

+0

@ Jeeped: Думаю, я выиграю эту ставку. :-) Да, я знаком с базовой датой для COM/VBA. Я хотел, чтобы плакат узнал об этом. –

ответ

0

TimeSerial Function возвращает значение Variant/Date, что в случае TimeSerial(0, -10, 0) является отрицательным

Результат TimeSerial(0, -10, 0), как показано на Local Window или при печати в Immediate Window выглядит положительный же, как TimeSerial(0, 10, 0)(попробуйте в немедленное окно):

debug.Print "TimeSerial(0, -10, 0) = " TimeSerial(0, -10, 0) vblf _ "TimeSerial(0, 10, 0) = " TimeSerial(0, 10, 0)

Однако простой тест с использованием IF подтверждает:

а) Они разные (попробуйте в ближайшем окне):

debug.Print TimeSerial(0, -10, 0) = TimeSerial(0, 10, 0)

б) Отрицательное значение TimeSerial(0, -10, 0)(попробуйте в немедленное окно):

debug.Print TimeSerial(0, -10, 0) < 0

Для получения 23:50:00 можно использовать:

debug.Print TimeSerial(24, -10, 0) или

debug.Print TimeSerial(24, -9, -60) среди других

Для получения дополнительной информации см: TimeSerial Function и Data Type Summary и

+0

Я не могу использовать 24, потому что пользователь вводит время 00:00 в ячейке Excel –

+0

Кажется, что ваш вопрос ** «Но когда мое время TimeSerial (0, -10, 0), не должно ли оно возвращаться 23:50:00?» ** был дан ответ. Теперь вы указываете еще одну проблему. Предложите принять этот ответ и создать новый вопрос, четко конкретизируя проблему. – EEM

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