Об этом уже спрашивали, однако я проверил все предыдущие решения, и ни одно из них не сработало, поэтому я спрашиваю здесь.
У меня есть код Excel, который отправляет электронное письмо, если выполняется определенный набор условий. Я трижды проверил свои данные, и там не было ошибок. Теперь код работал нормально несколько дней назад, и внезапно я получаю Run-Time error '287': Application-defined or object-defined error.
в строке .Send
. Когда я использую .Display
, он работает нормально, но, очевидно, мне нужно вручную отправить письмо.
Вот мой код:
Sub mailing()
Dim OutApp As Object
Dim OutMail As Object
Dim cell As Range
Dim lastrow As Long
Dim ws As Worksheet
lastrow = Worksheets("2018").Cells(Rows.Count, "Y").End(xlUp).Row
Dim rgRem1 As Range 'rg, Reminder 1
Dim rgRem2 As Range 'Reminder 2
Dim rgRem3 As Range 'Reminder 3
Dim rgAssigned As Range 'rg2, days since assigned
Set ws = Worksheets("2018")
With ws
lastrow = .Cells(Rows.Count, "G").End(xlUp).Row
Set rgAssigned = Range(.Cells(1, "X"), .Cells(lastrow, "X"))
Set rgRem1 = Range(.Cells(1, "Y"), .Cells(lastrow, "Y"))
Set rgRem2 = Range(.Cells(1, "z"), .Cells(lastrow, "z"))
Set rgRem3 = Range(.Cells(1, "aa"), .Cells(lastrow, "aa"))
End With
Application.ScreenUpdating = False
Set OutApp = CreateObject("Outlook.Application")
For Each cell In rgRem1
Set OutMail = OutApp.CreateItem(0)
If cell.Value = "SENDING" Then 'try with less conditions first
With OutMail
.To = Cells(cell.Row, "V").Value
.Subject = "WO# " & Cells(cell.Row, "G").Value & " - Reminder"
.Body = "Work Order: " & Cells(cell.Row, "G").Value & _
" has been assigned to you for " & Cells(cell.Row, "x").Value & " days and is not yet completed. Can you provide any updates?" & _
vbNewLine & vbNewLine & _
"Region: " & Cells(cell.Row, "B").Value & vbNewLine & _
"District: " & Cells(cell.Row, "C").Value & vbNewLine & _
"City: " & Cells(cell.Row, "D").Value & vbNewLine & _
"Atlas: " & Cells(cell.Row, "E").Value & vbNewLine & _
"Notification Number: " & Cells(cell.Row, "F").Value & vbNewLine
'.ReadReceiptRequested = True
.Send
End With
Cells(cell.Row, "Y").Value = Now
Set OutMail = Nothing
End If
Next cell
For Each cell In rgRem2
Set OutMail = OutApp.CreateItem(0)
If cell.Value = "SENDING" Then 'try with less conditions first
With OutMail
.To = Cells(cell.Row, "V").Value
.Subject = "WO# " & Cells(cell.Row, "G").Value & " - Reminder"
.Body = "Work Order: " & Cells(cell.Row, "G").Value & _
" has been assigned to you for " & Cells(cell.Row, "x").Value & " days and is not yet completed. Can you provide any updates?" & _
vbNewLine & vbNewLine & _
"Region: " & Cells(cell.Row, "B").Value & vbNewLine & _
"District: " & Cells(cell.Row, "C").Value & vbNewLine & _
"City: " & Cells(cell.Row, "D").Value & vbNewLine & _
"Atlas: " & Cells(cell.Row, "E").Value & vbNewLine & _
"Notification Number: " & Cells(cell.Row, "F").Value & vbNewLine
'.ReadReceiptRequested = True
.Send
End With
Cells(cell.Row, "z").Value = Now
Set OutMail = Nothing
End If
Next cell
For Each cell In rgRem3
Set OutMail = OutApp.CreateItem(0)
If cell.Value = "SENDING" Then 'try with less conditions first
With OutMail
.To = Cells(cell.Row, "V").Value
.Subject = "WO# " & Cells(cell.Row, "G").Value & " - Reminder"
.Body = "Work Order: " & Cells(cell.Row, "G").Value & _
" has been assigned to you for " & Cells(cell.Row, "x").Value & " days and is not yet completed. Can you provide any updates?" & _
vbNewLine & vbNewLine & _
"Region: " & Cells(cell.Row, "B").Value & vbNewLine & _
"District: " & Cells(cell.Row, "C").Value & vbNewLine & _
"City: " & Cells(cell.Row, "D").Value & vbNewLine & _
"Atlas: " & Cells(cell.Row, "E").Value & vbNewLine & _
"Notification Number: " & Cells(cell.Row, "F").Value & vbNewLine
'.ReadReceiptRequested = True
.Send
End With
Cells(cell.Row, "aa").Value = Now
Set OutMail = Nothing
End If
Next cell
'Set OutApp = Nothing 'it will be Nothing after End Sub
Application.ScreenUpdating = True
'For Each cell In rgAssigned
'If cell.Value = 25 And cell.Value <> "Completed" And cell.Value <> "Over 75 days since assigned" And cell.Value <> "" And Cells(cell.Row, "Y").Value = "" Then
'Cells(cell.Row, "Y").Value = "SENDING"
'End If
'If cell.Value = 50 And cell.Value <> "Completed" And cell.Value <> "Over 75 days since assigned" And cell.Value <> "" And Cells(cell.Row, "Z").Value = "" Then
'Cells(cell.Row, "Z").Value = "SENDING"
'End If
'If cell.Value = 75 And cell.Value <> "Completed" And cell.Value <> "Over 75 days since assigned" And cell.Value <> "" And Cells(cell.Row, "AA").Value = "" Then
'Cells(cell.Row, "AA").Value = "SENDING"
'End If
'Next cell
End Sub
Я пробовал несколько решений, предлагаемых онлайн, в том числе:
- Проверка настроек моего центра управления безопасностью - они установлены, как показано на этом изображении .
- Использование
.SendKeys
(оба .SendKeys "%S"
и .SendKeys "^{ENTER}"
)
- Использование
.SendMail
- Включение всех ссылок (в Excel), связанных с Microsoft Scripting Runtime, Outlook и объектными библиотеками
- Запуск кода как с открытым Outlook, так и с закрытым Outlook
- Я избегаю решения для слияния, так как этот Excel предназначен для использования несколькими людьми, каждый с одинаковыми настройками центра управления безопасностью, но с разными настройками слияния
У меня есть автоматизация электронной почты в нескольких моих макросах, и ни один из них не работает. Моя безопасность не изменилась, и мой компьютер не получал серьезных обновлений с тех пор, как я в последний раз использовал этот Excel. Если у кого-нибудь есть какие-либо исправления или информация, которая может мне помочь - , которая не включает или только повторяет решения, которые я уже тестировал - я был бы очень признателен. Я задал этот вопрос на mrexcel.com/forum в отношении аналогичного, но другого кода, и я обращаюсь к нему, так как я еще не получил никакого ответа.
EDIT:
Вот дополнительная информация о моих ссылках в Excel: