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