従業員の勤務時間を記録するテンプレートがあります。列 5 はその週の契約時間を示し、列 14 は追加の勤務時間を示します。パートタイム スタッフ (1 週間あたり 37.5 時間未満) で追加の時間勤務する場合は、標準料金が支払われます。ただし、週に 37.50 時間を超えると、1.5 時間で支払われます (これは別の列に記録されます)。
以下のコードは、1 週間の合計時間数 (列 18) を取得し、それが 37.5 を超える場合、時間の一部を 1.5 時間記録するようにユーザーに促します。これは、人々が正しく支払われることを保証するフェイルセーフな方法です。
以下のコードはほぼ完全に機能しますが、契約時間が 10 時間未満の場合、関係なくメッセージ ボックスが表示されます。コードの時間の文字列データ型が文字列としてあるためだと思いますが、他のデータ型で動作させることができないようです。どんな援助でも大歓迎です。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 14 Then
Dim I As Integer, CheckHours As Boolean
Dim MonthX As Worksheet
I = 6
CheckHours = False
Set MonthX = ThisWorkbook.ActiveSheet
Dim FT As String
FT = 37.5
Application.ScreenUpdating = False
'Use the Employee Number column to perform the check
Do While MonthX.Cells(I, 3) <> ""
'Declare variables
Dim ContractHours As String
Dim HoursPaid As String
Dim TotalHours As String
ContractHours = MonthX.Cells(I, 5)
HoursPaid = MonthX.Cells(I, 14)
TotalHours= MonthX.Cells(I, 18)
'If the contract hours plus the additional hours are greater than 37.50 then display warning
If TotalHours > FT Then
MsgBox "WARNING: Check the additional hours entered for " & _
MonthX.Cells(I, 2).Value & " " & MonthX.Cells(I, 1).Value & _
" as they will need to be split between Additional Basic and Overtime." & _
vbNewLine & vbNewLine & _
"Please refer to the Additional Hours Guidelines tab for more information.", vbOKOnly, "Please Check"
CheckHours = True
End If
I = I + 1
Loop
'Cancel boolean
If CheckHours = True Then
Cancel = True
End If
Application.ScreenUpdating = True
End If
End Sub