更改 Outlook 中的預設延遲發送

更改 Outlook 中的預設延遲發送

我想更改預設的延遲發送選項,這樣,如果我在周末發送,我可以透過一個快速連結延遲到週一上午 6:30 或 7:00,如果我在工作日(週一至週四)發送,晚上我可以選擇延遲發送,延遲發送快速存取工具列的預設時間是第二天早上6:30 或7 點左右。

我按照這篇文章概述了創建巨集的所有步驟: 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

相關內容