I'm not quite sure where to begin but first to resolve your issue (I hope) you need to change the below section:
Dim wsPT As Worksheet
On Error GoTo Handler:
Set wsPT = Sheets("billing")
wsPT.Cells(Application.Match("Grand Total", wsPT.Columns(1), 0), "C").ShowDetail = True
ExitPoint:
Set wsPT = Nothing
Handler:
MsgBox "Error Has Occurred etc...", vbCritical, "Routine Terminated"
Resume ExitPoint
Exit Sub
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
End Sub
To something more along the lines of:
Dim wsPT As Worksheet
On Error GoTo Handler:
Set wsPT = Sheets("billing")
wsPT.Cells(Application.Match("Grand Total", wsPT.Columns(1), 0), "C").ShowDetail = True
ExitPoint:
Set wsPT = Nothing
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub
Handler:
MsgBox "Error Has Occurred etc...", vbCritical, "Routine Terminated"
Resume ExitPoint
End Sub
As it is you're going into the error handler as part of the routine and thus a perpetual loop... also as above you should be resetting your App settings to TRUE not FALSE ... Events unlike ScreenUpdating will not reset to True by default and is pretty much guaranteed to cause you major headaches.
Bookmarks