【Outlook VBA】今開いているメールからワンクリックで予定登録画面を開く方法


メールから予定登録,eyecatch

皆様こんにちは、ノグチです。

メールでやり取りをしていて、メールの内容を予定に登録したいこと、ありますよね。

ランチのお誘いだったり、ミーティングの日程だったり、書類の提出期限だったり。

メール画面からワンクリックで予定登録の画面を開けたら便利なのになあ…

ついでに、メールの内容を予定に貼り付けておいてくれたら助かるのに…

それ、VBAを使えばできちゃいますよ。

ということで今回は、ワンクリックで今開いているメールの内容を転記した予定登録画面を開く方法をご紹介します。

スポンサーリンク

メールの内容を予定登録画面に転記する

では早速、以下の3ステップでメールの内容を予定登録画面に転記するコードを書いていきましょう。

  1. 今開いているメールのMailItemオブジェクトを取得する
  2. AppointItemオブジェクトを取得する
  3. AppointItemオブジェクトのプロパティにメールの値をセット

どれも今までの記事でご紹介した方法でできちゃいますよ。

1.今開いていメールのMailItemオブジェクトを取得する

まずは、今開いているメールのMailItemオブジェクトを取得しましょう。

今開いているメールのMailItemオブジェクトは、ApplicationオブジェクトのActiveInspectorメソッドでInspectorオブジェクトを取得して、更にInspectorオブジェクトのCurrentItemプロパティで取得できるのでしたね。

【Outlook VBA】今開いているOutlookウインドウを操作しよう!Inspectorオブジェクトの取得
Outlook vbaで、メールの添付ファイルをワンクリックで指定フォルダに保存する方法を複数回記事にわたってご紹介していきます。今回は、ActiveInspectionメソッドで、今開いているOutlookウインドウのInspectorオブジェクトを取得する方法をご紹介しています。

ここまでをコードにしてみると、こんな感じになります。

Dim objItem As Object
Dim objIns As Inspector

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得

2.予定のAppointItemオブジェクトを取得する

今開いているメールのMailItemオブジェクトが取得できたら、お次は予定のアイテムオブジェクトを取得しましょう。

予定は、AppointItemオブジェクトで操作するということは、以前こちらの記事でご紹介しました。

【はじめてのOutlook VBA】Outlookの予定を登録する方法
Outlook VBAでコーディングするためのVBEの準備と、VBAで予定を登録する方法をご紹介しています。1件の予定登録の手間は大したことがなくても、複数登録する必要が出てくると面倒臭い...本稿では複数の予定をOutlookにまとめて登録するための第一歩として、単体の予定をVBAで登録する方法をご紹介します。

このAppointItemオブジェクトを取得するために、ApplicationオブジェクトのCreateItemメソッドを使い、引数にAppointItemオブジェクトの定数olAppointmentItemをセットします。

こんな風に。

Dim objApItem As Outlook.AppointmentItem

Set objApItem = Application.CreateItem(olAppointmentItem)
これで、AppointItemオブジェクトが取得できました。

3.メールの内容をAppointItemオブジェクトのプロパティにセット

AppointItemオブジェクトが取得できたら、次はメールから取得した情報を、予定の内容にセットしていきます。

今回は予定の件名と本文に、今開いているメールの件名と本文をそれぞれセットすることにしましょう。

AppointItemオブジェクトのSubjectプロパティとBodyプロパティに、MailItemオブジェクトのSubjectプロパティとBodyプロパティで取得した値をセットします。

MailItemオブジェクトのプロパティについては下記記事をご覧くださいね。

【エクセルVBA】Outlookでメールを作成・送信する方法
エクセルシートに記入された件名や本文を、エクセルVBAによってOutlookのメールの件名と本文にセットしてメール送信する方法をご紹介しています。VBAでメールの送信ができれば、宛先に応じてメールの本文を変えつつ一斉に送信することもできますよ。

そして、それぞれプロパティをセットした状態で予定登録画面を開きたいので、プロパティセットの後にDisplayメソッドを加えておきます。

こんな感じ。

With objApItem
    .Subject = objItem.Subject
    .Body = objItem.Body
    .Display
End With
これで、予定登録画面を開きつつ、メールの情報を予定にセットできました。

今開いているメールの内容を予定の画面に転記するコード

上のコードをまとめると、こんなコードになります。
Sub Add_AppointItem()

Dim objItem As Object
Dim objIns As Inspector
Dim objApItem As Outlook.AppointmentItem

Set objIns = Application.ActiveInspector
Set objItem = objIns.CurrentItem   '今開いているメールオブジェクトを取得
Set objApItem = Application.CreateItem(olAppointmentItem)

With objApItem
    .Subject = objItem.Subject
    .Body = objItem.Body
    .Display
End With

End Sub

今開いているメールの件名と本文を予定の件名と本文にセットして、Displayメソッドで予定登録画面を表示する、というコードです。

ではメールをメールを開きつつ、実行してみましょう。

こちらのメールを開いて…

メール,予定登録

マクロを実行してみると…

予定

この通り、開いているメールの内容が、予定登録画面に転記されていますね。

あとは予定の内容を編集して、保存ボタンを押せば、予定登録完了です。

登録画面を表示しないで予定を登録しておきたい場合は、上のコードのDisplayメソッドの部分を、Saveメソッドに書き換えればOK。

VBAのプロシージャをメニューに追加する

メールの内容を予定登録画面に転記する方法をご紹介しましたが、マクロの起動方法も大切ですよね。

折角予定登録はマクロがやってくれたとしても、マクロの起動を「メニューから開発タブを開いて、マクロからプロシージャを選んで…」と複数ステップを踏んでいては、手間が減っているようには思えません。

折角なので、プロシージャをメニューにセットして、ワンクリックで起動できるようにしてしまいましょう。

まず、メールのメニューバーからファイル>オプションを開きます。

(Outlookのオプションではなく、メール画面からのオプションなので注意です。)

オプション画面の『リボンのユーザー設定』を選択して、右側の下部にある「新しいタブ」ボタンで新しいタブを追加しておきます。

次に左側のリストから「マクロ」を選択します。

すると、今あるプロシージャ名がリストで表示されますので、メニューバーに表示しておきたいプロシージャを選択して、画面中央にある「追加」ボタンで、先ほど追加した新しいタブに加えておきます。

メール,オプション

後はOKを押してオブション画面を閉じれば…

メール,メニュー,プロシージャセット

このように、メールのメニューにプロシージャがセットできました。

あとは、開いたメール画面でこのプロシージャをクリックすれば、マクロが実行されます。

もちろん、この記事以外でご紹介しているコードも、この方法でメニューにセットしておくことができますよ。

但し、イベントプロシージャはメニューにセットすることができません。

イベントプロシージャは対象となるイベントが起こったときに自動的に実行されますので、そもそもセットしておく必要もありませんからね。

最後に

今回は、ワンクリックで今開いているメールの内容を転記した予定登録画面を開く方法をご紹介しました。

記事の中ではメールから予定に転記したのは件名と本文だけでしたが、本文から日付や場所を取り出すことができれば、更に予定登録が楽になりますね。

それでは、最後までお読みいただきありがとうございました!

連載目次:Outlook VBAでメールを操作してみよう

メーラーとして名高く、そして便利なOutlook。

Outlookのメールだって、VBAで操作することができますよ。本シリーズでは、Outlookのメールを、VBAで操作する方法をご紹介していきます。

  1. 【Outlook VBA】メールの送信時イベントで確認ダイアログを表示する方法
  2. 【Outlook VBA】UnReadItemCountプロパティで受信フォルダの未読メール件数を取得する方法
  3. 【Outlook VBA】メール本文から欲しい情報だけを取り出す方法
  4. 【Outlook VBA】Application_NewMailExイベントでメール受信時にメッセージを表示する方法

タイトルとURLをコピーしました