Функция Application.Match не работает с датой (VBA) - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь добавить правила проверки в макрос для поля ввода, который потребует от пользователей ввода последней даты четвертой календарной четвертой даты окончания в поле ввода.Я использую цикл 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...