Проблема заключается в том, что ваш вопрос усугубляется. На ваш вопрос на самом деле два этапа:
- Действительно ли
txtStartDate
действительно действительная дата?
- Если это дата, правильно ли она отформатирована?
Именование txtStartDate
означает, что вы получаете дату в виде текста (в форме). Тем не менее, вы передаете его своей функции с предположением, что txtStartDate
на самом деле является датой. Это становится очевидным, потому что функция dateCheck
ожидает дату: Function dateCheck(dateValue As Date) As Boolean
.
Итак, вот предложение решение, чтобы решить оба сразу:
Sub tmpTest()
Dim txtStartDate As String
txtStartDate = "11/20/2015"
Debug.Print dateCheck(txtStartDate)
End Sub
Function dateCheck(dateValue As String) As Boolean
If IIf(IsDate(txtStartDate), Format(CDate(txtStartDate), "mm/dd/yyyy"), "") = dateValue Then dateCheck = True
End Function
Имейте в виду, что это очень упрощенный подход, который не будет работать для международных форматов даты. На самом деле, возможно, вам придется немного изменить его, поскольку у меня нет формата даты. Если вам нужно что-то более сложное, вам придется написать немного больше кода VBA (включая расширенную функцию проверки).
Знаете ли вы о [функции VBA] (https://msdn.microsoft.com/en-us/library/office/gg278584%28v=office.15%29.aspx) 'IsDate'? – Ralph
Да, я знаю об этом. – kruk22
пользователь может ввести 05/01/2016, который он имел в виду 5 января 2016 года, но ваша пользовательская форма будет интерпретироваться как 1 мая 2016 года. Избегайте всех аномалий, позволяйте вводить пользователя в любом формате, который им нравится, но всегда меняете введенную дату в формате «dd-mmm-yyyy». Excel может распознать локализованный формат и соответствующим образом изменить их в ваш предпочтительный формат. – Rosetta