vredinka
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору dneprcomp По вашему коду ветка цикла считается только если выполняются ОБА условия (And): и месяц меньше и день. То есть если я считаю на 15 мая, а человек родился 26 мая, то по вашему коду он уйдёт на вторую ветку, где ELSE ему текущий год не вычтет, а по моей версии кода он останется в этой ветке и свою (-1) получит. Присмотритесь. Может я совсем ничего не понимаю? Просчитайте варианты. wiwiw Спасибо. Не использовала потому, что не знала (А разве здесь DateAdd нужен?). Извините, но за основу (естессно) ваш код, с обозначениями: dteBirthdate=b, Date=t. t- вводится из формы и по умолчанию является текущей датой, но может быть изменена как в меньшую (для проверки беру 1985 год), так и в большую сторону. Public Function Age(b As Date, t As Date) As Long Dim lngAge As Long If t < b Then t = b lngAge = DateDiff("yyyy", b, t) If DateSerial(Year(t), Month(b), Day(b)) > t Then lngAge = lngAge - 1 End If Age = lngAge End Function В таком виде функция работает, но вот назначение этого куска: If Not IsDate(dteBirthdate) Then dteBirthdate = Date End If мне не понятно, чего ради dteBirthdate = Date? Или в смысле, что если вместо дата рождения (а в моём случае и "искомая" дата) не в "датовском" формате, то присвоить им текущую дату, и тогда функция вместо ошибки выдаст на выходе ноль? Всё это здорово, но вопрос остаётся открытым: почему при сравнении 66-летняя бабуля оказывается младше 7 лет и не попадает в выборку, а 2-3 годовалые дети попадают в запрос "старше 15"? Кто знает, в чём дело и что делать? |