Войти

Показать полную графическую версию : Работа с датами


Наташок
27-01-2011, 22:20
Работа с датами в VBA
Определить кто из родителей старше. Вывести разницу согласно году,месяцу,дню.Например,папа-18.03.1970,мама-21,02,1971. Результат: папа старше на 1 год, у мамы на 1 месяц раньше день рождения, по дню у папы день рождения раньше.

KnRSU
31-01-2011, 16:08
Кто старше (пример):

Const Father = "18.03.1970"
Const Mother = "21.02.1971"

Private Function fnWhoOlder(Father as String, Mother as String) as Byte
If CDate(Father) = CDate(Mother) Then
fnWhoOlder = 0
ElseIf CDate(Father) > CDate(Mother) Then
fnWhoOlder = -1
Else
fnWhoOlder = 1
End If
End Function

Select Case fnWhoOlder(Father, Mother)
Case -1
Debug.Print "Папа старше мамы"
Case 0
Debug.Print "Папа и мама - родились в один день"
Case 1
Debug.Print "Папа младше мамы"
End Select


надеюсь что понятно в какую сторону копать дальше, сейчас времени нет, завтра выложу полный рабочий листинг по всей задаче, а не в виде намёка на поиск пути решения

KnRSU
01-02-2011, 08:41
Нужная функция, для правильного представления числа в текстовом виде

Public Function fnNum2Word(ByVal inp As Long, ByVal fir As String, ByVal sec As String, ByVal many As String) As String
Dim tmp As String
tmp = Format$(inp, "000")
If Len(tmp) > 2 Then tmp = Mid(tmp, Len(tmp) - 1, 2)
Select Case Val(Mid(tmp, 1, 1) & "")
Case 1
Select Case Val(Mid(tmp, 2, 1) & "")
Case 0 - 9
fnNum2Word = many
End Select
Case 0, 2 To 9
Select Case Val(Mid(tmp, 2, 1) & "")
Case 1
fnNum2Word = fir
Case 2 To 4
fnNum2Word = sec
Case 0, 5 To 9
fnNum2Word = many
End Select
End Select
End Function


собственно функция выдающая в окно Immediate результат, который требуется по условиям поставленной задачи

Как вызвать окно ImmediateПоявляется/Активируется по нажатии сочетания клавиш Ctrl+G

Sub CalculateBirthdayDiffs(ByVal fDate As String, ByVal mDate As String)
Dim yearDiff As Long
Dim monthDiff As Long
Dim dayDiff As Long
If IsDate(fDate) And IsDate(fDate) Then
If CDate(fDate) = CDate(mDate) Then
Debug.Print "Папа и мама - родились в один день"
ElseIf CDate(fDate) < CDate(mDate) Then
yearDiff = DateDiff("yyyy", fDate, mDate)
Debug.Print "Папа старше мамы на " & yearDiff & " " & fnNum2Word(yearDiff, "год", "года", "лет")
Else
yearDiff = DateDiff("yyyy", fDate, mDate)
Debug.Print "Папа младше мамы на " & yearDiff & " " & fnNum2Word(yearDiff, "год", "года", "лет")
End If
If Month(fDate) > Month(mDate) Then
monthDiff = Month(fDate) - Month(mDate)
Debug.Print "у мамы на " & monthDiff & " " & fnNum2Word(monthDiff, "месяц", "месяца", "месяцев") & " раньше день рождения"
ElseIf Month(fDate) < Month(mDate) Then
monthDiff = Month(mDate) - Month(fDate)
Debug.Print "у папы на " & monthDiff & " " & fnNum2Word(monthDiff, "месяц", "месяца", "месяцев") & " раньше день рождения"
End If
If Day(fDate) > Day(mDate) Then
dayDiff = Day(fDate) - Day(mDate)
Debug.Print "по дню у мамы день рождения раньше на " & dayDiff & " " & fnNum2Word(dayDiff, "день", "дня", "дней")
ElseIf Day(fDate) < Day(mDate) Then
dayDiff = Day(mDate) - Day(fDate)
Debug.Print "по дню у папы день рождения раньше на " & dayDiff & " " & fnNum2Word(dayDiff, "день", "дня", "дней")
End If
End If
End Sub




© OSzone.net 2001-2012