Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Работа с датами

Ответить
Настройки темы
VBA - Работа с датами

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:20, 27-01-2011

 

Пользователь


Сообщения: 120
Благодарности: 22

Профиль | Цитировать


Кто старше (пример):
Код: Выделить весь код
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
надеюсь что понятно в какую сторону копать дальше, сейчас времени нет, завтра выложу полный рабочий листинг по всей задаче, а не в виде намёка на поиск пути решения

Отправлено: 16:08, 31-01-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 120
Благодарности: 22

Профиль | Цитировать


Нужная функция, для правильного представления числа в текстовом виде
Код: Выделить весь код
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

Отправлено: 08:41, 01-02-2011 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » VBA - Работа с датами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] "Мигалка". работа с датами в JS, PHP Artem-Samsung Вебмастеру 1 31-01-2009 01:10
Прочие БД - Расчет полей с датами и передачи строк в отчет. crem78 Программирование и базы данных 0 09-08-2008 07:34
Работа БП Surround Хочу все знать 5 05-03-2006 21:40
проблема с датами в JS dascon Вебмастеру 10 07-07-2005 01:23
Работа ХР с CD LamerOK Microsoft Windows 2000/XP 8 17-04-2004 23:51




 
Переход