Office Space: Microsoft Outlook の予定を作成する

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

Microsoft Outlook の予定を作成する

Office Space コラムの熱心な読者であれば、開始から 1 か月の間に Microsoft Outlook がほとんど取り上げられていないことにお気付きでしょう。これにはきちんとした理由があります。Outlook にさまざまなセキュリティ機能が追加されたために、完全に自動化された形で実行可能なスクリプトを作成することが困難になったことです。スクリプトから電子メールを送信することはできますが、実際に送信するためには、Outlook アカウントを使用した電子メール送信のためのアクセス許可を、ダイアログ ボックスを手動でクリックすることで要求する必要があります。言うまでもなく、これではユーザーの操作なしにタスクをすばやく簡単に実行できるというスクリプト本来の目的が多少とはいえ損なわれてしまいます。

一方、完全に自動化された形でタスクを実行できないからといって、どのようなタスクも自動化された形で実行できないわけではありません。そこで、Outlook スクリプトを定期的にコラムのテーマとして取り上げ、現状でもなおスクリプトでの実行が簡単なタスクを中心にご紹介します。たとえば、Outlook の予定表に予定を追加するようなタスクです。

最初に予定の作成を取り上げることにした理由は 2 つあります。1 つは、予定の作成がきわめて日常的に行われ役に立つタスクであることです。もう 1 つは、スクリプトを使用して予定を作成するのがきわめて簡単であることです。実際、必要なことは、CreateItem メソッドを呼び出し、予定を作成することを指定するだけです。後は、予定のプロパティを設定し、Save メソッドを呼び出すだけで、予定表に予定が追加されます。

それにしても、Outlook がこれほど簡単になっていることを知っていたら、Outlook についてのコラムをもっとたくさん書いていたのですが。

予定を追加するサンプル スクリプトを次に示します。

Const olAppointmentItem = 1

Set objOutlook = CreateObject("Outlook.Application")
Set objAppointment = objOutlook.CreateItem(olAppointmentItem)

objAppointment.Start = #4/11/2005 11:00 AM#
objAppointment.Duration = 60
objAppointment.Subject = "Scripting Guys Planning Session"
objAppointment.Body = "Meet with Scripting Guys to discuss upcoming plans."
objAppointment.Location = "44/2039"
objAppointment.ReminderMinutesBeforeStart = 15
objAppointment.ReminderSet = True
 
objAppointment.Save

ご覧のとおり、まず olAppointmentItem という定数を定義し、その値を 1 に設定しています。この値は、CreateItem に対し、連絡先や電子メール メッセージなどではなく予定を作成することを指定します。次に、Outlook.Application オブジェクトのインスタンスを作成します。このサンプル スクリプトでは、Outlook が既に開いていることを前提としています。さらに、CreateItem メソッドを呼び出し、"空の" 予定を作成します。

後は、予定のプロパティに値を割り当てるだけです。予定のプロパティのほとんどは名前を見ただけで意味がわかります。ここでは 2 つの点だけを指摘しておきます。

予定の開始時刻 (Start) を確実に日付と時刻の値として渡すためには、日付と時刻を二重引用符ではなくシャープ記号 (#) で囲みます。つまり、次のように指定するのは誤りです。

objAppointment.Start = "4/11/2005 11:00 AM"

次のように、区切り記号としてシャープ記号を使用します。

objAppointment.Start = #4/11/2005 11:00 AM#

実は、VBScript は日付と時刻の扱いを非常に得意としており、4/11/2005 を数式 (4 を 11 で割り、それをさらに 2005 で割る) と解釈するような不可解なことをするおそれはまずありません。ただし、あえて危険を冒す必要もないとは思いますが。

また、Duration プロパティと ReminderMinutesBeforeStart プロパティの値が "分" で表されていることにも注意してください。2 時間の予定を設定する場合は、次のように Duration プロパティの値を 120 (120 分) に設定します。

objAppointment.Duration = 120

後は、Save メソッドを呼び出して予定を予定表に保存するだけです。

このスクリプトを実行すると、次のような予定が作成されます。

Outlook の予定

さて、喜ぶのはまだ早すぎます。実はまだ少し残っています。最初に挙げたスクリプトは 1 回のみの予定を設定します。それだけでも言うことはありませんが、定期的な予定を設定する必要がある場合はどうでしょうか。それをスクリプトですばやく簡単に実行できる可能性はどれくらいあるのでしょうか。

実は、次に示すとおり、その可能性は十分にあります。

Const olAppointmentItem = 1
Const olRecursWeekly = 1

Set objOutlook = CreateObject("Outlook.Application")
Set objAppointment = objOutlook.CreateItem(olAppointmentItem)

objAppointment.Start = #4/11/2005 11:00 AM#
objAppointment.Duration = 60
objAppointment.Subject = "Scripting Guys meeting"
objAppointment.Body = "Meeting with Scripting Guys to discuss upcoming plans."
objAppointment.Location = "44/2039"
objAppointment.ReminderMinutesBeforeStart = 15
objAppointment.ReminderSet = True

Set objRecurrence = objAppointment.GetRecurrencePattern
objRecurrence.RecurrenceType = olRecursWeekly
objRecurrence.PatternStartDate = #4/11/2005#
objRecurrence.PatternEndDate = #6/11/2005#
 
objAppointment.Save

ご覧のとおり、このスクリプトは 1 回のみの予定を作成するスクリプトに数行のコードを追加しただけです。まず、もう 1 つ定数 (olRecursWeekly) を定義しています。この定数によって、Outlook に対し、この予定を毎週設定することを指定します (定期的な予定は繰り返し発生するものであり、このスクリプトで設定する予定は毎週同じ曜日の同じ時刻に発生します)。

次に、RecurrencePattern オブジェクトのインスタンスを作成します。そのためには、次のように GetRecurrencePattern メソッドを呼び出します。

Set objRecurrence = objAppointment.GetRecurrencePattern

このオブジェクトを作成したら、次の 3 つのプロパティを設定します。

RecurrenceType   定期的な予定のパターンを指定します。このサンプル スクリプトでは、予定を週に 1 回の割合で設定します。他にも以下のパターンを指定できます。

定数

説明

olRecursDaily

0

毎日発生する予定を設定します。

olRecursWeekly

1

毎週同じ曜日に発生する予定を設定します。

olRecursMonthly

2

毎月同じ日に発生する予定を設定します。

olRecursYearly

5

毎年同じ日に発生する予定を設定します。

PatternStartDate   予定の定期パターンを開始する日付を指定します。この値は定期的な予定の最初の日付である必要はありません。たとえば、Start プロパティを #4/11/2005 11:00 AM# に設定した場合は、PatternStartDate を 4 月 11 日までのどの日付にも設定できます (4/9/2005 など)。

PatternEndDate   予定の定期パターンが終了する日付を指定します。この場合も値は正確な終了日である必要はありません。たとえば、毎週月曜日の予定を作成したとします。この場合、PatternEndDate の値は月曜日でなくてもかまいません。予定を 6 月 6 日までで終了する場合は、PatternEndDate は 6/11/2005 などでもかまいません。そうすると、6 月 11 日までの毎週月曜日に予定が設定され、11 日より後に予定は設定されません。

RecurrencePattern オブジェクトのプロパティをすべて設定したら、Save メソッドを呼び出します。これで、4 月 11 日月曜日に始まり、6 月 6 日月曜日まで継続する定期的な予定が追加されます。

このように、完全に自動化された形で予定を Outlook の予定表に追加することができました。また、このような予定を設定する方法がわかったので、これを活用して Office Space コラムで Outlook スクリプトをもっと頻繁に取り上げることを検討すべきかもしれません。