Я хочу изменить параметры отложенной отправки по умолчанию, чтобы при отправке в выходные у меня была быстрая ссылка на отсрочку до понедельника в 6:30 или 7:00 утра, а при отправке в будний день (пн.-чт.) вечером я мог выбрать опцию отложенной отправки, а по умолчанию для панели быстрого доступа к отложенной отправке будет установлено время отправки на следующий день около 6:30 или 7 утра.
Я выполнил все шаги по созданию макроса, описанные в этом посте: Outlook: изменение задержки отправки электронной почты по умолчанию для функции «Не доставлять раньше»
но когда я попытался запустить макрос, я получил эту ошибку:
произошла ошибка в строке 0 с описанием: переменная объекта или переменная блока не задана, и номером ошибки 91.
Как я могу это исправить?
решение1
Я хотел по сути то же самое решение, что и вы, и у меня тоже были некоторые проблемы с этим макросом. Я поискал на нескольких других сайтах и в конце концов нашелэто решениеэто помогло мне достичь большей части пути. Я немного переделал их макрос, чтобы получить код ниже. Я только добавил кнопку для запуска макроса на панели быстрого доступа для новых сообщений и не тестировал обработку ошибок исходного кода, поэтому не могу за это поручиться, но оставил ее.
Что я изменил по сравнению с оригиналом:
- Изменил сравнение со временем по умолчанию NoDeferredDelivery так, чтобы оно было неравным, поскольку я хочу удалить задержку только в том случае, если она уже установлена.
- Добавил Exit Sub в этот блок If, так как в противном случае он бы продолжил работу и в любом случае ввел бы задержку.
- Изменена логика расчета даты, так что теперь время отправки по умолчанию — 7:38 утра следующего дня, если это воскресенье-четверг, и утро понедельника, если это пятница или суббота.
- Обновлено поле сообщения, в котором указано новое время отправки, чтобы включить день недели, чтобы было понятно, если вы запустите его в пятницу или субботу, что отправка произойдет в понедельник, а не завтра утром.
Sub DelaySendMail()
On Error GoTo ErrHand ' Error Handling
Dim objMailItem As MailItem ' Object to hold mail item
Dim SendDate As String ' The date to send delayed mail
Dim SendTime As String ' The time to send delayed mail
Dim MailIsDelayed As Boolean ' Set if the mail will be delayed
Dim NoDeferredDelivery As String ' Value if deferred delivery is disabled
SendTime = " 07:38:00" ' Time to deliver delayed mail (7:38 AM)
MailIsDelayed = False ' We assume it's being delivered now
NoDeferredDelivery = "1/1/4501" ' Magic number Outlook uses for "delay mail box isn't checked"
'Set object to mail item you have open
Set objMailItem = Outlook.ActiveInspector.CurrentItem
' Check and make sure current item is an unsent message
If objMailItem.Sent = True Then
Err.Raise 9000
End If
' If mail is currently delayed, remove the delay and quit
If objMailItem.DeferredDeliveryTime NoDeferredDelivery Then 'Altered since test wasn't working in original
objMailItem.DeferredDeliveryTime = NoDeferredDelivery
MsgBox "Mail will be delivered immediately when sent", _
vbOKOnly, "Deferred delivery removed"
Exit Sub 'Added since otherwise it didn't actually quit the method
End If
' Set the date appropriately for the next weekday
If Weekday(Date, vbMonday) = 5 Then
' Today is Friday
' Delay mail three days
SendDate = Date + (3)
MailIsDelayed = True
ElseIf Weekday(Date, vbMonday) = 6 Then
' Today is Saturday
' Delay mail two days
SendDate = Date + (2)
MailIsDelayed = True
Else
' Today is Sunday-Thursday so delay till tomorrow morning
SendDate = Date + (1)
MailIsDelayed = True
End If
If MailIsDelayed Then
' Mail should be delayed - set the delivery date/time
objMailItem.DeferredDeliveryTime = SendDate & SendTime
'Altered to include day it would be sent for visiblity over a weekend
MsgBox "Mail will be delivered on " & _
WeekdayName(Weekday(SendDate)) & ", " & SendDate & " at" & SendTime, _
vbOKOnly, "Mail delayed"
End If
Exit Sub
ErrHand:
' Handle well-known errors with message
' Other errors, just tell the user
If Err.Number = 13 Then
' No current item or current item isn't a mail message
MsgBox "Future delivery can only be set on mail items", vbOKOnly, "Not a mail item"
ElseIf Err.Number = 9000 Then
' The active message has already been sent
MsgBox "Please run this macro from an unsent mail item", vbOKOnly, "Not an unsent mail item"
Else
MsgBox "An error has occured on line " & Erl & _
", with a description: " & Err.Description & _
", and an error number " & Err.Number
End If
End Sub