79607032

Date: 2025-05-05 13:44:17
Score: 1
Natty:
Report link
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cell As Range
    Dim invalidEntry As Boolean
    Dim cancelChange As Boolean
    Dim sysDateColumn As Integer
    
    ' Set your SysDate column number here (e.g., 4 for Column D)
    sysDateColumn = 4
    
    ' Prevent multiple alerts
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    
    ' Check each changed cell
    For Each cell In Target
        ' Only validate SysDate column
        If cell.Column = sysDateColumn Then
            If Not IsEmpty(cell) Then
                ' Reset validation flags
                invalidEntry = False
                
                ' Check 1: Is it a date at all?
                If Not IsDate(cell.Value) Then
                    invalidEntry = True
                Else
                    ' Check 2: Correct format (dd-mmm-yyyy)
                    If Not cell.Text Like "##-???-####" Then
                        invalidEntry = True
                    ' Check 3: Not a past date
                    ElseIf CDate(cell.Value) < Date Then
                        invalidEntry = True
                    End If
                End If
                
                ' If invalid, mark for undo
                If invalidEntry Then
                    cancelChange = True
                    cell.Value = "" ' Clear invalid entry
                End If
            End If
        End If
    Next cell
    
    ' Restore Excel functionality
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    ' Show error if needed
    If cancelChange Then
        MsgBox "Invalid date! Please:" & vbCrLf & _
               "1. Use dd-mmm-yyyy format (e.g., 05-Jun-2024)" & vbCrLf & _
               "2. Only enter today or future dates", _
               vbCritical, "Invalid Date Entry"
    End If
End Sub
Reasons:
  • Blacklisted phrase (1): ???
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Amit