web-dev-qa-db-ja.com

Outlook2010での会議への招待の遅延-vba

会議の招待状をスケジュールし、後の日時に参加者への送信を自動的に遅らせる、つまり会議の招待状の送信を遅らせるコードを作成しようとしています。

以下はコードですが、30分後に招待状を送信したい時点でエラーが発生しています。

エラーライン:

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

これについての助けに本当に感謝します。どうもありがとう

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
1
Adsar

Application.WaitはOutlookでは機能しません。タイマー付きのDoevent関数、またはSleep関数のいずれかを使用できます。

Doeventを使用すると、マクロの開始後も作業を継続できるため、最適なオプションです。使いすぎると問題が発生します。

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

スリープでは、関数を宣言する必要があり、メッセージが送信されるまで作業できなくなります。あなたはそれを次のように宣言します:

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

コードは次のようになります(プログラムを機能させるために.Displayで解決される他の追加の問題にも注意できます)

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
0
Jonathan