Validating date format
Solution 1:
Function dateCheck(dateStrng As String) As Boolean
Dim dateArr as Variant
If IsDate(dateStrng) Then ' <~~ if it IS a date
dateArr = Split(dateStrng,"/")
If UBound(dateArr) = 2 Then '<~~ if it has three substrings separate by two "slashes"
If CInt(dateArr(0)) < 13 Then '<~~ if the 1st number is lower or equals the maximum possible month number
If CInt(dateArr(0)) > 0 Then '<~~ if the 1st number is higher or equals the mimimum possible month number
If CInt(dateArr(1)) < 31 Then '<~~ if the 2nd number is lower or equals the maximum possible day number
If CInt(dateArr(1)) > 0 Then '<~~ if the 2nd number is higher or equals the mimimum possible day number
If CInt(dateArr(2)) < 10000 Then dateCheck = CInt(dateArr(2)) > 999 '<~~ if the 3rd number is a 4 digit integer "year" number, then check returns True
End If
End If
End If
End If
End If
End Function
Solution 2:
The CDate(dateValue)
part of your function will simply return 'dateValue' as a Date
. Use the .Numberformat
property to get the format:
Function dateCheck(dateValue As Date) As Boolean
If dateValue.NumberFormat <> "mm/dd/yyyy" Then
MsgBox "Please use the mm/dd/yyyy date format!"
dateCheck = True
End If
End Function
Solution 3:
The problem is that your question is compounded. There are actually two steps involved to your question:
- Is
txtStartDate
actually a valid date? - If it is a date, is it formatted correctly?
The naming of txtStartDate
implies that you are getting a date as a text (in a form). Yet, you are passing it to your function with the assumption that txtStartDate
is actually a date. This becomes obvious because the function dateCheck
expects a date: Function dateCheck(dateValue As Date) As Boolean
.
So, here is a solution proposal to solve both at once:
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
Keep in mind that this is a very simplistic approach which will not work for international date formats. In fact, you might have to adjust it a bit as I do not have your date format. If you need something more sophisticated then you will have to write a bit more VBA code (including an extensive validation function).