Validate data

This usually goes in the Worksheet_Change event, to trap errors before it goes any further.

'validated?
strType = Cells(Range("Fieldlist").Row + 1, Target.Column).Value
intType = Cells(Range("Fieldlist").Row + 2, Target.Column).Value
If ValidateData(Target.Value, strType, intType) Then
    'do this if data is valid
    Call HighlightCell(Target)
Else
    Target.Select
    Exit Sub
End If
Function ValidateData(varData As Variant, strType As String, intType2 As Integer) As Boolean

    ValidateData = True

    'if text then test for length
    If strType = "202" And Len(varData) > intType2 Then
        MsgBox "The text is too longer than " + Str(intType2) + " characters"
        ValidateData = False
        Exit Function
    End If

    'if a Date is not a Date (IDEA: and check if DATE IN THIS CENTURY?)
    If strType = "7" Then
        If Not IsDate(varData) Then
            MsgBox "This does not look like a proper Date " '+ (varData) + "."
            ValidateData = False
        End If
    End If
    
    'if a Number is not a Number
    If strType = "3" Then
        If Not IsNumeric(varData) Then
            MsgBox "This does not look like a Number " '+ (varData) + "."
            ValidateData = False
        End If
    End If

    'NB: cell format will change to Date if a date is entered in a Number cell. So, replace format from RowMask?

End Function

Improvements:

  • Check if a Date is in a date range. eg. this century.
  • Show the dubious data in the message.
  • Excel will change the Cell Format to Date if the entered data is a Date. Change this back. Ideally from the RowMask.
  • Check for other types of data. eg. True/False