[COLOR=red]Sub Reset()[/COLOR]
[COLOR=red]Application.EnableEvents = True[/COLOR]
[COLOR=red]End Sub[/COLOR]
[COLOR=darkblue]Private[/COLOR] [COLOR=darkblue]Sub[/COLOR] Worksheet_Change([COLOR=darkblue]ByVal[/COLOR] Target [COLOR=darkblue]As[/COLOR] Range)
[COLOR=darkblue]Dim[/COLOR] lngRow [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Long[/COLOR] [COLOR=green]'target row[/COLOR]
[COLOR=darkblue]Dim[/COLOR] iCol [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR] 'target column
[COLOR=darkblue]Dim[/COLOR] sCode [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]String[/COLOR] [COLOR=green]'code entered by user[/COLOR]
[COLOR=darkblue]Dim[/COLOR] dteEmpStart [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Date[/COLOR] [COLOR=green]'employee start date[/COLOR]
[COLOR=darkblue]Dim[/COLOR] answer [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR] [COLOR=green]'Yes/No[/COLOR]
[COLOR=darkblue]Dim[/COLOR] SickCount [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR]
[COLOR=darkblue]On[/COLOR] [COLOR=darkblue]Error[/COLOR] [COLOR=darkblue]GoTo[/COLOR] errHandler
Application.EnableEvents = [COLOR=darkblue]False[/COLOR] [COLOR=green]'prevent change event from re-triggering[/COLOR]
[COLOR=darkblue]If[/COLOR] Target.Row <= 17 [COLOR=darkblue]Then[/COLOR] [COLOR=darkblue]Exit[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=green]'Has more than one cell been changed?[/COLOR]
[COLOR=darkblue]If[/COLOR] Target.Cells.Count > 1 [COLOR=darkblue]Then[/COLOR]
MsgBox "Please enter codes one at a time!", vbInformation
[COLOR=darkblue]GoTo[/COLOR] errExit
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
lngRow = Target.Row
iCol = Target.Column
[COLOR=darkblue]If[/COLOR] Target.Column >= 14 [COLOR=darkblue]Then[/COLOR]
[COLOR=green]'reset Sick Bank if entry deleted[/COLOR]
[COLOR=red] If IsEmpty(Target.Value) Then[/COLOR]
[COLOR=red] answer = MsgBox("Do you want to reset Sick Bank?", vbYesNo)[/COLOR]
[COLOR=red] If answer = vbYes Then[/COLOR]
[COLOR=red] SickCount = Range("L" & lngRow).Value[/COLOR]
[COLOR=red] Range("L" & lngRow).Value = SickCount + 1[/COLOR]
[COLOR=red] End If[/COLOR]
[COLOR=darkblue]GoTo[/COLOR] errExit
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
[COLOR=green]'has a code been entered?[/COLOR]
sCode = UCase(Target.Value)
[COLOR=green]'check to see if no more sick days allowed[/COLOR]
[COLOR=red]If Range("L" & lngRow).Value = 0 Then Target.Value = "SU"[/COLOR]
[COLOR=darkblue]Call[/COLOR] ProcessCode(sCode, lngRow)
[COLOR=darkblue]Call[/COLOR] CheckCumulativeSickDays(lngRow, iCol)
[COLOR=darkblue]GoTo[/COLOR] errExit
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
[COLOR=green]'has the date changed[/COLOR]
[COLOR=darkblue]If[/COLOR] Target.Column = 8 [COLOR=darkblue]Then[/COLOR]
dteEmpStart = Format(Target.Value, "mm/dd/yyyy")
[COLOR=darkblue]Call[/COLOR] ProcessDateChange(lngRow, dteEmpStart)
Application.EnableEvents = [COLOR=darkblue]True[/COLOR]
[COLOR=darkblue]Exit[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]If[/COLOR]
errExit:
Application.EnableEvents = [COLOR=darkblue]True[/COLOR]
[COLOR=darkblue]Exit[/COLOR] [COLOR=darkblue]Sub[/COLOR]
errHandler:
MsgBox "Error #" & Err.Number & vbCrLf _
& Err.Description
[COLOR=darkblue]Resume[/COLOR] errExit
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=darkblue]Sub[/COLOR] CheckCumulativeSickDays([COLOR=darkblue]ByVal[/COLOR] myRow [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Long[/COLOR], _
[COLOR=darkblue]ByVal[/COLOR] myCol [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR])
[COLOR=darkblue]Dim[/COLOR] iWeekday [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR]
[COLOR=darkblue]Dim[/COLOR] dteSickDay [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Date[/COLOR]
[COLOR=darkblue]Dim[/COLOR] rngRange [COLOR=darkblue]As[/COLOR] Range
[COLOR=darkblue]Dim[/COLOR] iCountSickDays [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR]
[COLOR=green]'Stop[/COLOR]
[COLOR=darkblue]On[/COLOR] [COLOR=darkblue]Error[/COLOR] [COLOR=darkblue]Resume[/COLOR] [COLOR=darkblue]Next[/COLOR]
dteSickDay = Cells(17, myCol).Value
iWeekday = Application.WorksheetFunction.Weekday(dteSickDay)
[COLOR=darkblue]Select[/COLOR] [COLOR=darkblue]Case[/COLOR] iWeekday
[COLOR=darkblue]Case[/COLOR] 2, 3: [COLOR=green]'Monday or Tuesday[/COLOR]
[COLOR=darkblue]Set[/COLOR] rngRange = Range(Cells(myRow, myCol - 4), Cells(myRow, myCol))
[COLOR=darkblue]Case[/COLOR] 4, 5, 6: [COLOR=green]'Wednesday, Thursday or Friday[/COLOR]
[COLOR=darkblue]Set[/COLOR] rngRange = Range(Cells(myRow, myCol - 3), Cells(myRow, myCol))
[COLOR=darkblue]Case[/COLOR] [COLOR=darkblue]Else[/COLOR] [COLOR=green]'Saturday or Sunday[/COLOR]
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Select[/COLOR]
iCountSickDays = Application.WorksheetFunction.CountIf(rngRange, "S")
[COLOR=darkblue]If[/COLOR] [COLOR=red]iCountSickDays >=[/COLOR][COLOR=red] 3[/COLOR] Then _
MsgBox "This employee is required to bring in a medical note." & vbCrLf _
& "Please follow up and submit medical to HR", vbInformation
[COLOR=darkblue]Set[/COLOR] rngRange = [COLOR=darkblue]Nothing[/COLOR]
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=darkblue]Sub[/COLOR] ProcessDateChange([COLOR=darkblue]ByVal[/COLOR] myRow [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Long[/COLOR], _
[COLOR=darkblue]ByVal[/COLOR] myDate [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Date[/COLOR])
[COLOR=green]'==============================================[/COLOR]
[COLOR=green]'for a new employee clear previous row contents[/COLOR]
[COLOR=green]'==============================================[/COLOR]
[COLOR=darkblue]Dim[/COLOR] dteRecStart [COLOR=darkblue]As[/COLOR] Date [COLOR=green]'records start date "N17"[/COLOR]
[COLOR=darkblue]Dim[/COLOR] iDateDiff [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Long[/COLOR] [COLOR=green]'difference between empStart and RecStart dates[/COLOR]
[COLOR=green]'Stop[/COLOR]
dteRecStart = Format(Range("N17"), "mm/dd/yyyy")
iDateDiff = DateDiff("d", dteRecStart, myDate)
Range(Cells(myRow, 14), Cells(myRow, 14 + iDateDiff)).ClearContents
Range("L" & myRow).Value = 10 [COLOR=green]'reset the sickness count[/COLOR]
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=darkblue]Sub[/COLOR] ProcessCode([COLOR=darkblue]ByVal[/COLOR] myCode [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]String[/COLOR], _
[COLOR=darkblue]ByVal[/COLOR] myRow [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Long[/COLOR])
[COLOR=green]'=====================================[/COLOR]
[COLOR=green]'process the code entered by the user[/COLOR]
[COLOR=green]'=====================================[/COLOR]
[COLOR=darkblue]Dim[/COLOR] iSickCount [COLOR=darkblue]As[/COLOR] [COLOR=darkblue]Integer[/COLOR]
[COLOR=green]'Stop[/COLOR]
[COLOR=darkblue]Select[/COLOR] [COLOR=darkblue]Case[/COLOR] myCode
[COLOR=darkblue]Case[/COLOR] "D":
[COLOR=darkblue]Call[/COLOR] msgD
[COLOR=darkblue]Case[/COLOR] "M":
[COLOR=darkblue]Call[/COLOR] msgM
[COLOR=darkblue]Case[/COLOR] [COLOR=darkblue]Else[/COLOR]
[COLOR=green]'code "S" has been entered[/COLOR]
iSickCount = [COLOR=darkblue]CLng[/COLOR](Range("L" & myRow).Value)
[COLOR=darkblue]If[/COLOR] iSickCount = 0 [COLOR=darkblue]Then[/COLOR]
[COLOR=darkblue]Call[/COLOR] msgS
[COLOR=darkblue]Else[/COLOR]
[COLOR=green]'decrease the sickness count[/COLOR]
iSickCount = iSickCount - 1
Range("L" & myRow).Value = iSickCount
[COLOR=darkblue]End[/COLOR] If
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Select[/COLOR]
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]
[COLOR=darkblue]Sub[/COLOR] msgD()
MsgBox "You have entered the BEREAVEMENT attendance code." & vbCrLf _
& "Please do the following:" & vbCrLf _
& " 1. Idenify the realtionship of the deceased by inserting a comment." & vbCrLf _
& " 2. Express your condolenses." & vbCrLf _
& " 3. Using Tact, request documentation for their file.", vbInformation
[COLOR=darkblue]End[/COLOR] [COLOR=darkblue]Sub[/COLOR]
Sub msgM()
MsgBox "You have entered the MOVING attendance code." & vbCrLf _
& "You need to submit a Change of Address Form to HR for this employee", vbInformation
[COLOR=darkblue]End[/COLOR] Sub
Sub msgS()
MsgBox "Maximum sickness count reached!" & vbCrLf _
& "Please enter a code other than 'S'. ", vbInformation
End Sub