Atrasando convites de reunião no Outlook 2010 - vba

1

Estou tentando escrever um código para agendar um convite para a reunião e atrasar o envio para os participantes em uma data / hora posterior automaticamente, ou seja, adiar o envio de uma reunião convidar

Abaixo está o código, mas está dando um erro no ponto em que eu quero que o convite seja enviado 30 minutos depois.

Linha de erro:

Application.Wait (Now + TimeValue ("06:30:00"))

Será realmente gratificante ajudar nisso. Muito obrigado

Sub Book_meeting_room()


Dim olApp As Outlook.Application
Dim olApt As AppointmentItem

Set olApp = Outlook.Application                 'Creating Outlook Session
Set olApt = olApp.CreateItem(olAppointmentItem) 'Creating an Appointment

With olApt

.MeetingStatus = olMeeting                  'olAppointmentItem with Meeting status olMeeting
                                            'becomes a OL Meeting Item.
.Subject = "Room 1"                         'Subject
.Start = #11/20/2017 8:30:00 AM#            'Enter Date + Time here.
.Duration = 240                             'In Minutes
.Location = "Office"                        'Location of the meeting.
.Recipients.Add ("Margaret")                'Recipient Name, Alias, or any other Attribute.
.BusyStatus = olFree
.ReminderSet = True
.ReminderMinutesBeforeStart = 20

End With

Application.Wait (Now + TimeValue("06:30:00"))          'defer 06hrs and 30mins.
olApt.Send                             'Sending Mail.
Set olApt = Nothing

MsgBox "Invite Sent", vbInformation

End Sub
    
por Adsar 19.10.2017 / 07:12

1 resposta

0

Application.Wait não funciona com o Outlook, você pode usar a função Doevent com um timer ou a função Sleep

Usar Doevent é a melhor opção, pois permitirá que você continue trabalhando depois de iniciar a macro. O problema acontece se você usar demais:

Public Sub Pause(Seconds As Single)
Dim TimeEnd As Single
TimeEnd = Timer + Seconds
While Timer < TimeEnd
    DoEvents
Wend
End Sub 

Com o sono, você precisa declarar a função e ela não permitirá que você trabalhe mais até que a mensagem seja enviada. Você declara isso com:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

seu código se torna o seguinte (você também pode observar o outro problema adicional que será resolvido com .Display para fazer o programa funcionar)

Sub Book_meeting_room()

Dim olApp As Outlook.Application
Dim olApt As AppointmentItem

Set olApp = Outlook.Application                 'Creating Outlook Session
Set olApt = olApp.CreateItem(olAppointmentItem) 'Creating an Appointment

With olApt

.MeetingStatus = olMeeting                  'olAppointmentItem with Meeting status olMeeting
                                            'becomes a OL Meeting Item.
.Subject = "Room 1"                         'Subject
.Start = #11/20/2017 8:30:00 AM#            'Enter Date + Time here.
.Duration = 240                             'In Minutes
.Location = "Office"                        'Location of the meeting.
.Recipients.Add ("Margaret")                'Recipient Name, Alias, or any other Attribute.
.BusyStatus = olFree
.ReminderSet = True
.ReminderMinutesBeforeStart = 20
.Display

End With

Pause (23400) 'defer 06hrs and 30mins.
'Sleep (23400) 'also defer 06hrs and 30mins eventually

olApt.Send                             'Sending Mail.
Set olApt = Nothing

MsgBox "Invite Sent", vbInformation

End Sub
    
por 20.10.2017 / 18:21