You have so many formulas pulling from so many other cells, it is not going to be possible for me to recreate this.
However, it is important to understand what is really going on.
Sorry, I should have mentioned - I tried that already. It just made it so nothing happened.
If I enter something in cell A4 nothing would happen (as opposed to the error before)
The way you had it written before, every single change you make on the sheet will cause that error message to come up. But it is not coming up because it found an error, it is coming up because you are hitting that code EVERY time the code runs. Nothing in your code is telling it to stop or skip over the error code. When using OnError code, you MUST do something to make the code stop before hitting it if it does not find any errors.
By putting the additions in that I did, if it finds no errors, we are telling it to exit the code before running the error message, as it should.
If you change the value in A4, nothing SHOULD happen, as your IF blocks are looking for changes happening in columns 5 or 12. A4 is in neither of those columns.
Try adding the following message boxes to your code, like this, and you will see that the code is running. It will tell you when it starts, if it falls in either loop, when it is done, and if an error is found.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ProcError
Application.ScreenUpdating = False
[COLOR=#ff0000]MsgBox "Worksheet_Change macro running"[/COLOR]
'FRI End Time - 18 y/o check
If Target.Column = 5 Then[COLOR=#ff0000]
MsgBox "Change occurred in column 5"[/COLOR]
'If under 18 years of age BJR will be 0 and then
If Range("BJR" & Target.Row).Value = 0 Then
'If Friday finish time is > 23:00 then
If Range("BKA" & Target.Row).Value = 1 Then
MsgBox "This staff member is under 18 and cannot work past 23:00!", vbExclamation, "ERROR"
End If
End If
'If FRI END - SAT START is less than 11h rest Then ERROR
If Range("BJT" & Target.Row).Value = 0 Then
MsgBox "This staff member needs more rest!", vbExclamation, "ERROR"
End If
End If
'SAT Start Time - 11H check - Against Previous Day
If Target.Column = 12 Then
[COLOR=#ff0000] MsgBox "Change occurred in column 12"[/COLOR]
'If Less than FRI END - SAT START is less than 11h rest Then ERROR
If Range("BJT" & Target.Row).Value = 0 Then
MsgBox "This staff member needs more rest!", vbExclamation, "ERROR"
End If
End If
Application.ScreenUpdating = True
[COLOR=#ff0000]MsgBox "Code finished running with no errors!"[/COLOR]
Exit Sub
ProcError: MsgBox "ERROR!"
Application.ScreenUpdating = True
End Sub
Unfortunately, I cannot test out the logic within your IF loops without access to your workbook.
I would recommend adding a break point at the beginning of your code to step inside it, and then use the F8 key to step through the code one line at a time to see what it is doing (if you hover over any variables while doing this, it will show you their value). This is a common debugging technique.
See:
https://www.thespreadsheetguru.com/blog/2014/4/8/debugging-vba-code-adding-breakpoints