Worksheet_Calculate не имеет целевого аргумента.Возможно, вы запутываете некоторый связанный код Worksheet_Change.
Поскольку Target не передается в Worksheet_Calculate, вы решили уменьшить его, но никогда не назначать (устанавливать) какие-либо ячейки или диапазоны ячеек.
Target is Nothing и Nothing не имеет ни столбца, ни свойства Value.
Вы можете попробовать просмотреть значения в столбце W, чтобы проверить, не является ли значение просроченным , но это может означатьчто дубликаты писем будут разосланы.Возможно, установите другой столбец, в котором значение ИСТИНА / ЛОЖЬ указывает, было ли уже отправлено письмо.
Предполагая, что столбец Z не используется, вы можете использовать его, чтобы указать, было ли уже отправлено просроченное письмо.Этот метод сохраняется при закрытии и повторном открытии книги, если изменения сохраняются при закрытии.
Option Explicit
Private Sub Worksheet_Calculate()
Dim rng As Range
For Each rng In Range(Cells(2, "W"), Cells(Rows.Count, "W").End(xlUp))
If LCase(rng.Text) = "overdue" And Not rng.Offset(0, 3) Then
With CreateObject("Outlook.Application").createitem(0)
.To = "Harrywood@company.com"
.Subject = "Item OverDue"
.Body = "Dear User," & vbNewLine & vbNewLine & "An Item has been marked as Overdue. Please open up the workbook to assess."
.send
End With
rng.Offset(0, 3) = True
End If
Next rng
End Sub