Страницы: 1
RSS
Расчет возраста на VBA
 
Добрый день,

Большая просьба помочь с написанием кода. Нужно сделать расчет возраста на VBA. Работает не правильно. Если ставить дату дня рождения 29.05.2019, а сегодня 28.05.2020 пишет, что уже исполнился год. Хотя на самом деле нет.

Sub birthday()
   Dim dtBirthday As Date
   Dim dtActual As Long
   

   dtBirthday = InputBox("Введите дату рождения", "Дата рождения", Date)
   
   If DatePart("m", dtBirthday) > DatePart("m", Date) Then
       dtActual = DateDiff("yyyy", dtBirthday, Date)
       MsgBox ("Ваш возраст: " & dtActual - 1)
   Else
        dtActual = DateDiff("yyyy", dtBirthday, Date)
        MsgBox ("Ваш возраст: " & dtActual)
   End If

End Sub
Изменено: nikcvi - 28.05.2020 01:30:01
 
Как я понял, функция DatePart("m", dtBirthday) > DatePart("m", Date) решает проблему для месяцев. Соответственно, Datepart для дней - решает для дней. Как объединить эти функции вместе?
 
Так работает. Сам разобрался.

Sub birthday()
   Dim dtBirthday As Date
   Dim dtActual As Long
   

   dtBirthday = InputBox("Введите дату рождения", "Дата рождения", Date)
   
   If DatePart("m", dtBirthday) > DatePart("m", Date) Or DatePart("d", dtBirthday) > DatePart("d", Date) Then
       dtActual = DateDiff("yyyy", dtBirthday, Date)
       MsgBox ("Ваш возраст: " & dtActual - 1)
   Else
        dtActual = DateDiff("yyyy", dtBirthday, Date)
        MsgBox ("Ваш возраст: " & dtActual)
   End If

End Sub
Изменено: nikcvi - 28.05.2020 01:44:58
 
nikcvi, код следует оформлять соответствующим тегом. Ищите такую кнопку (см. скрин) и исправьте своё сообщение.
 
все правильно, в VBA, как в любом другом языке есть ограниченный набор базовых функций
и у вас есть мозг, который способен из этого ограниченного набора функций языка программирования составить неограниченное количество комбинаций
для получения требуемого результата достаточно разумно соединить эти два инструмента и.... готово!

функция HowOld посчитает возраст (в годах) на сегодня, если у казать только дату рождения (BD) и возраст на любую дату, если указать 2-й параметр
Код
Function HowOld(BD As Date, Optional OnTheDate As Date = 0)
  If OnTheDate = 0 Then OnTheDate = Date
  HowOld = Year(OnTheDate) - Year(BD) - _
  IIf(DateSerial(Year(OnTheDate), Month(BD), Day(BD)) <= OnTheDate, 0, 1)
End Function
Изменено: Ігор Гончаренко - 28.05.2020 02:16:06
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх