Outlook でデフォルトの送信遅延を変更する

Outlook でデフォルトの送信遅延を変更する

デフォルトの遅延送信オプションを変更して、週末に送信する場合は月曜日の午前 6:30 または 7:00 まで遅延するためのクイック リンクが表示されるようにし、平日 (月曜 - 木曜) の夜に送信する場合は遅延送信を選択できるようにし、遅延送信クイック アクセス ツールバーのデフォルトを翌日の午前 6:30 または 7:00 頃に設定します。

この投稿で概説されているように、マクロを作成するためのすべての手順を実行しました。 Outlook: 「次の時間までに配信しない」機能のデフォルトの電子メール遅延を変更する

しかし、マクロを実行しようとすると、次のエラーが発生しました:

行 0 でエラーが発生しました。説明: オブジェクト変数またはブロック変数が設定されていません、エラー番号は 91 です。

これをどうすれば修正できますか?

答え1

私も基本的にあなたと同じ解決策を求めていましたが、そのマクロでも問題がありました。他のサイトをいくつか検索して、最終的にこの解決策これでほぼ目的の目的を達成できました。マクロを少し修正して、最終的に以下のコードを作成しました。新しいメッセージのクイック アクセス ツール バーにマクロを実行するボタンを追加しただけで、元のコードのエラー処理はテストしていないため保証できませんが、そのまま残しました。

オリジナルから変更した点:

  • 遅延がすでに設定されている場合にのみ遅延を削除するため、NoDeferredDelivery のデフォルト時間との比較を等しくないように変更しました。
  • その If ブロックに Exit Sub を追加しました。そうしないと、処理が続行され、遅延が発生します。
  • 日付計算ロジックを修正し、デフォルトの送信時刻が日曜日から木曜日の場合は翌朝 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

関連情報