Что не так с этим фрагментом кода VBA, который должен возвращать количество дней? - PullRequest
0 голосов
/ 17 августа 2011

Итак, я написал этот фрагмент кода (на самом деле это часть чего-то большего, но эта часть вызывает у меня проблемы), и я новичок в VBA, поэтому не могу понять, почему это всегда возвращает 0 в качестве результата формулы.

Function test(begindatum As Date, einddatum As Date)  
Dim Days1  
If begindatum < 1 / 9 / 1996 And begindatum > 31 / 7 / 1986 Then  
    If einddatum > 31 / 8 / 1996 Then  
        Days1 = DateDiff("d", 1 / 9 / 1996, begindatum)  
    Else: Days1 = DateDiff("d", einddatum, begindatum)  
    End If  
End If  
test = Days1  
End Function

Я проверял различные даты, кстати, все они возвращали вывод 0.
Был бы признателен, если бы кто-то мог указать, где я ошибся.

С уважением,
Daquicker

Ответы [ 4 ]

3 голосов
/ 17 августа 2011

Ваши даты;

 1 / 9 / 1996

- математические выражения - 1 , разделенные на 9 , разделенные на 1996 - который будет равен нулю при приведении к целочисленному типу.

для буквального использования даты:

 If begindatum < #1/9/1996# and ...
2 голосов
/ 17 августа 2011

Вам нужно использовать DateSerial, чтобы преобразовать все даты в целые числа, а затем сравнить их.

0 голосов
/ 17 августа 2011

Просто для обмена знаниями ... вы также можете использовать функцию CDate. Он работает довольно хорошо, а также принимает другие форматы даты, как CDate("01/Sep/1996").

Обратите внимание, однако. Обработка даты может стать проблемой, если вы будете использовать ее в других региональных настройках (например, в глобальных приложениях).

0 голосов
/ 17 августа 2011

Без пробелов, правильный разделитель #, и VBA всегда ожидает американский (m / d / yy) формат, поэтому для 1 сентября используйте #9/1/1996#.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...