Some cleanup and variable renaming
I just used plug numbers since I didn't want to type ALL that data in from a picture. You can attach a small sample workbook to make it easier
Option Explicit
Sub TrainingStatus()
Dim dataRange As Range, dataRow As Range
Dim sMsg As String, rowName As String
Dim rowDate As Date
Dim ws As Worksheet
Dim bSomeOutOfDate As Boolean
bSomeOutOfDate = False
sMsg = "Attention! The following training expires within 7 days, or have already expired: " & Chr(10) & Chr(10)
On Error GoTo exit_sub
For Each ws In ThisWorkbook.Worksheets
sMsg = sMsg & ws.Name & ":"
Set dataRange = ws.Range("A6:D313")
For Each dataRow In dataRange.Rows
rowDate = dataRow.Cells(1, 3).Value
If CLng(rowDate) = 0 Then GoTo Next_dataRow
If rowDate < Date + 8 Then
bSomeOutOfDate = True
rowName = dataRow.Cells(1, 1).Value
If Len(rowName) = 0 Then rowName = dataRow.Cells(1, 1).End(xlUp).Value
sMsg = sMsg & Chr(10) & "Row - " & dataRow.Row & " - " & rowName & " -- " & rowDate
End If
Next_dataRow:
Next dataRow
Next ws
If Not bSomeOutOfDate Then sMsg = Chr(10) & "All training is up to date"
MsgBox sMsg & Chr(10) & Chr(10), 48, "Expiring Training Dates!"
exit_sub:
End Sub