Alterar atraso padrão no envio no Outlook

Alterar atraso padrão no envio no Outlook

Quero alterar as opções padrão de envio atrasado para que, se eu enviar em um fim de semana, tenha um link rápido para adiar até segunda-feira às 6h30 ou 7h00, e se eu enviar durante um dia de semana (segunda a quinta) em à noite, posso selecionar Envio retardado e o padrão para a barra de ferramentas de acesso rápido para envio retardado é o dia seguinte, por volta das 6h30 ou 7h.

Passei por todas as etapas para criar a macro conforme descrito nesta postagem: Outlook: alterar o atraso de e-mail padrão para o recurso "Não entregar antes"

mas quando fui executar a macro recebi este erro:

ocorreu um erro na linha 0, com uma descrição: variável de objeto ou com variável de bloco não definida e um número de erro 91.

Como posso consertar isso?

Responder1

Eu queria essencialmente a mesma solução que você e também tive alguns problemas com essa macro. Pesquisei em alguns outros sites e acabei encontrandoesta soluçãoisso me levou a maior parte do caminho até lá. Revisei um pouco a macro deles para terminar com o código abaixo. Eu apenas adicionei um botão para executar a macro na barra de ferramentas de acesso rápido para Novas Mensagens e não testei o tratamento de erros do código original, então não posso garantir isso, mas deixei-o.

Coisas que mudei do original:

  • Alterei a comparação com o tempo padrão NoDeferredDelivery para não ser igual, pois só quero remover o atraso se um atraso já estiver definido.
  • Adicionado um Exit Sub a esse bloco If, caso contrário ele continuaria e colocaria o atraso de qualquer maneira.
  • Revisei a lógica de cálculo de data para que meu horário de envio padrão seja 7h38 da manhã seguinte, se for de domingo a quinta, e segunda de manhã, se for sexta ou sábado.
  • Atualizada a caixa de mensagem que informa o novo horário de envio para incluir o dia da semana, para que fique claro se você executá-lo em uma sexta-feira ou sábado que iria para segunda-feira em vez de amanhã de manhã.
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

informação relacionada