Я пытаюсь добавить правила проверки в макрос для поля ввода, который потребует от пользователей ввода последней даты четвертой календарной четвертой даты окончания в поле ввода.Я использую цикл If ElseIf Else для запуска правил проверки.Правильный ввод должен быть "03/31 / гггг", "06/30 / гггг", "09/30 / гггг" или 12/31 / гггг (год будет отличаться). Вот мой код на данный момент:
Sub Test()
'Prompt users to input a new quarter-end date and validate that the date is the last day of a calendar quarter-end
Do
'Prompts users for a date
InpDT = InputBox("Enter quarter-end date (mm/dd/yyyy): ", "Quarter-End Date")
'Validates proper date format
If Not IsDate(InpDT) Then
MsgBox "Invalid date format"
valid = False
'Validates that month of date is either March, June, September, or December
ElseIf IsError(Application.Match(DatePart("m", InpDT), Array(3, 6, 9, 12), False)) Then
MsgBox "Must be quarter-end month (i.e. 'March')"
valid = False
'Validates that day of date is 31 for March/December or 30 for June/September
ElseIf Not ((IsError(Application.Match(DatePart("m", InpDT), Array(6, 9), False)) And IsError(Application.Match(DatePart("d", InpDT), Array(30), False))) Or (IsError(Application.Match(DatePart("m", InpDT), Array(3, 12), False)) And IsError(Application.Match(DatePart("d", InpDT), Array(31), False)))) Then
MsgBox "Must be last day of quarter-end (i.e. 'March 31')"
valid = False
Else
AsOf = DateValue(InpDT)
valid = True
End If
Loop Until valid = True
End Sub
Кажется, что подпрограмма хорошо работала вплоть до последнего предложения ElseIf, где я стараюсь убедиться, что если пользователь вводит месяц как июнь или сентябрь, день должен быть «30», тогда как если пользовательвводит месяц как март или декабрь, день должен быть «31». В настоящее время подпункт проверяет любой день в течение 3/6/9/12 месяцев как действительный (то есть он не отклоняет «29.03.2008»).
Буду признателен за любую помощь (относительно новый для VBA).