Standardmäßige Sendeverzögerung in Outlook ändern

Standardmäßige Sendeverzögerung in Outlook ändern

Ich möchte die Standardoptionen für „Senden verzögern“ ändern, sodass ich beim Senden am Wochenende über einen Schnelllink zum Verzögern bis Montag um 6:30 oder 7:00 Uhr verfüge und beim Senden an einem Wochentag (Mo. - Do.) abends „Senden verzögern“ auswählen kann. Die Standardeinstellung für die Symbolleiste für den Schnellzugriff „Senden verzögern“ ist dann der nächste Tag um ca. 6:30 oder 7:00 Uhr.

Ich habe alle Schritte zum Erstellen des Makros ausgeführt, wie in diesem Beitrag beschrieben: Outlook: Standardmäßige E-Mail-Verzögerung für die Funktion „Nicht zustellen vor“ ändern

aber als ich das Makro ausführen wollte, erhielt ich diese Fehlermeldung:

In Zeile 0 ist ein Fehler mit der Beschreibung „Objektvariable“ oder „Blockvariable nicht festgelegt“ und der Fehlernummer 91 aufgetreten.

Wie kann ich das beheben?

Antwort1

Ich wollte im Wesentlichen die gleiche Lösung wie Sie und hatte auch einige Probleme mit diesem Makro. Ich habe ein paar andere Websites durchsucht und schließlich gefundendiese Lösungdamit war ich schon fast am Ziel. Ich habe ihr Makro ein wenig überarbeitet und bin schließlich beim folgenden Code gelandet. Ich habe nur eine Schaltfläche zum Ausführen des Makros in der Symbolleiste für den Schnellzugriff auf neue Nachrichten hinzugefügt und die Fehlerbehandlung des Originalcodes nicht getestet, kann also nicht dafür bürgen, habe es aber drin gelassen.

Dinge, die ich gegenüber dem Original geändert habe:

  • Den Vergleich mit der Standardzeit von NoDeferredDelivery habe ich so geändert, dass er ungleich ist, da ich die Verzögerung nur entfernen möchte, wenn bereits eine Verzögerung festgelegt ist.
  • Zu diesem If-Block wurde ein Exit Sub hinzugefügt, da es sonst trotzdem weitergehen und die Verzögerung einfügen würde.
  • Die Datumsberechnungslogik wurde überarbeitet, sodass meine Standard-Sendezeit bei Sonntag bis Donnerstag 7:38 Uhr am nächsten Morgen und bei Freitag oder Samstag Montagmorgen ist.
  • Das Meldungsfeld, in dem die neue Sendezeit angegeben wird, wurde aktualisiert und enthält nun auch den Wochentag. So ist klar, dass die Sendung, wenn Sie sie an einem Freitag oder Samstag ausführen, auf Montag verschoben wird und nicht auf morgen früh.
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

verwandte Informationen