Cambiar el envío retrasado predeterminado en Outlook

Cambiar el envío retrasado predeterminado en Outlook

Quiero cambiar las opciones predeterminadas de envío diferido para que si envío un fin de semana tenga un enlace rápido para retrasar hasta el lunes a las 6:30 o 7:00 a. m., y si envío durante un día laborable (de lunes a jueves) en por la noche puedo seleccionar Envío diferido y el valor predeterminado para la barra de herramientas de acceso rápido de envío diferido es el día siguiente alrededor de las 6:30 o 7 am.

Seguí todos los pasos para crear la macro como se describe en esta publicación: Outlook: cambie el retraso predeterminado del correo electrónico para la función "No entregar antes"

pero cuando fui a ejecutar la macro recibí este error:

ha ocurrido un error en la línea 0, con una descripción: variable de objeto o con variable de bloque no configurada y un número de error 91.

¿Cómo puedo arreglar esto?

Respuesta1

Básicamente quería la misma solución que tú y también tuve algunos problemas con esa macro. Busqué en un par de sitios más y finalmente encontréesta solucióneso me llevó la mayor parte del camino hasta allí. Revisé un poco su macro para terminar con el siguiente código. Solo agregué un botón para ejecutar la macro en la barra de herramientas de acceso rápido para Mensajes nuevos y no probé el manejo de errores del código original, por lo que no puedo garantizarlo, pero lo dejé ahí.

Cosas que cambié del original:

  • Se cambió la comparación con el tiempo predeterminado de NoDeferredDelivery para que no sea igual, ya que solo quiero eliminar el retraso si ya hay un retraso establecido.
  • Se agregó un Sub de salida a ese bloque If, ​​ya que de lo contrario continuaría y pondría el retraso de todos modos.
  • Se revisó la lógica de cálculo de la fecha para que mi hora de envío predeterminada sea las 7:38 a. m. de la mañana siguiente si es de domingo a jueves, y luego el lunes por la mañana si es viernes o sábado.
  • Se actualizó el cuadro de mensaje que le indica la nueva hora de envío para incluir el día de la semana, de modo que quede claro si lo ejecuta un viernes o sábado, pasará al lunes en lugar de mañana por la mañana.
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

información relacionada