Другие языки программирования и технологии

Помогите сделать задачу VBA

Рассчитать, в какой день недели вы родились? или Расчитать сколько времени прошло с момента вашего поступления в академию
Sub MacrosBirthDay()
'Рассчитать, в какой день недели вы родились
Dim BirthDay, BirthMonth, BirthYear
Dim JD, R
metka:
ans = InputBox("Введите день вашего рождения по образцу - dd. mm. yyyy :")
If Len(ans) = 0 Then GoTo metka
BirthDay = Val(Left(ans, 2))
BirthMonth = Val(Mid(ans, 4, 2))
BirthYear = Val(Right(ans, 4))
JD = JulianDay(BirthDay, BirthMonth, BirthYear)
R = (JD + 1.5) Mod 7
Select Case R
Case 0
R = "о воскресенье"
Case 1
R = " понедельник"
Case 2
R = " вторник"
Case 3
R = "а среда"
Case 4
R = " четверг"
Case 5
R = "а пятница"
Case 6
R = "а суббота"
End Select
MsgBox "Вы родились " + ans + " это был" + R
End Sub

Sub MacrosVremyaPostupleniya()
'Расчитать сколько времени прошло с момента вашего поступления в академию
Dim PostDay, PostMonth, PostYear
Dim JD, JD2, CurDate, R
metka:
ans = InputBox("Введите день вашего поступления в академию по образцу - dd. mm. yyyy :")
If Len(ans) = 0 Then GoTo metka
PostDay = Val(Left(ans, 2))
PostMonth = Val(Mid(ans, 4, 2))
PostYear = Val(Right(ans, 4))
JD = JulianDay(PostDay, PostMonth, PostYear)
CurDate = CStr(Date)
D = Val(Left(CurDate, 2))
M = Val(Mid(CurDate, 4, 2))
Y = Val(Right(CurDate, 4))
JD2 = JulianDay(D, M, Y)
R = JD2 - JD
MsgBox "Со времени вашего поступления в академию (" + ans + ") по сегодняшнюю дату (" + CurDate + ") прошло " + CStr(R) + " дней. "
End Sub

Function JulianDay(D, M, Y)
If M = 1 Or M = 2 Then
Y = Y - 1
M = M + 12
End If
A = Int(Y / 100)
B = 2 - A + Int(A / 4)
JulianDay = Int(365.25 * (Y + 4716)) + Int(30.6001 * (M + 1)) + D + B - 1524.5
End Function
Evgen Evgen
Evgen Evgen
31 781
Лучший ответ
для этого VBA не надо, отними одну дату от другой
Evgen Mezencev
Evgen Mezencev
68 014
Функция Weekday() Вам в помощь.

Weekday(Date,[FirstDayOfWeek])

Функция используется для получения номера дня (между 1 и 7) из указанной даты

Возвращаемое значение: Возвращает значение типа Variant(Integer), содержащее целое число (между 1 и 7), представляющее день недели

Параметры: Функция содержит именованные аргументы

Date - Обязательный. Значение типа Variant, числовое выражение, строковое выражение или любая комбинация, позволяющая отобразить дату. Допустимый диапазоно дат-01.01.0000 до 31.12.9999. Если аргумент содержит зарезервированное слово Null, то функцией возвращает Null

Firstdayofweek - Необязательный. Константа, указывающая первый день недели. Если этот аргумент опущен, считается, что неделя начинается с воскресенья. Ниже перечислены допустимые значения аргумента FirstDayOfWeek:

* vbUseSystem = 0 - Используется значение NLS API
* vbSunday = 1 - Воскресенье (по умолчанию)
* vbMonday = 2 - Понедельник
* vbTuesday =3 - Вторник
* vbWednesday =4 - Среда
* vbThursday =5 - Четверг
* vbFriday =6 - Пятница
* vbSaturday =7 - Суббота

Возвращаемые значения Ниже перечислены значения, возвращаемые функцией Weekday:

* vbSunday =1 - Воскресенье
* vbMonday =2 - Понедельник
* vbTuesday =3 - Вторник
* vbWednesday =4 - Среда
* vbThursday =5 - Четверг
* vbFriday =6 - Пятница
* vbSaturday =7 - Суббота

Пример:
' Используем функцию для
' определения дня недели, соответствующего
' указанной дате
Dim MyDate
MyDate = "Июль 27, 1966" ' Присваиваем дату
Print Weekday(MyDate,vbMonday) ' возвращается 3, поскольку
' MyDate соответствует среде

Так же можно воспользоваться функцией DatePart().

DatePart() — очень важная функция, которая возвращает указанную Вами часть даты (например, только год, только месяц или только день недели) .

Удачи!