こんにちは、くのへです!
2024年9月に「OutlookVBA」の講座を実施しました。
筆者が最も得意な技術の一つであるOutlookVBAを講座にしたものであり、次のような内容になっています。
第1回:初めてOutlookVBAを使う方向けに、基本事項、メール作成、保存
第2回:オブジェクト構造、タスク・予定表の操作
第3回:ExcelでOutlookVBA、イベントマクロの基本
この3回のコースによりOutlookVBAの基本技術を習得し、明日からOutlookVBAを活用して便利ツールを作れるようになる、という講座です。
この内容についてザッとこちらで紹介いたします。
OutlookVBA講座の目標(ゴール)
この講座は次の事項にコミットする講座です。
【第1回】
1.OutlookVBAでメールを作成できるようになる
2.OutlookVBAでメールを保存できるようになる
【第2回】
1.OutlookVBAのオブジェクト構造を理解し習得する
2.OutlookVBAでタスク・予定表アイテムを操作(情報取得・作成)出来るようになる
【第3回】
1.ExcelでOutlookVBAを扱う方法を習得する
2.イベントマクロの基本を習得し、メールを送った時・メールを受信した時に動作するイベントマクロを扱えるようになる
講座内容のご紹介
第1回から第3回の講座の概要は以下の通りです。
(第1回)OutlookVBAの基本事項
OutlookでもVBAを使えることを知らない方も対象としており、まずは「開発タブ」の開き方から一緒に手を動かして頂きました。
その後、「変数の宣言を強制する(Option Explicit)」などの基本設定を一緒に操作して準備を万端にします。
この辺りから一緒にみんなで手を動かしながら解説するので、初めてOutlookVBAに触る方でも安心な講座です。
(第1回)OutlookVBAでメール作成
まずは、いきなりですがメールを作成するコードを丸写しする形で、プログラミングして頂きました。
そのコードがこちらです。
Sub CreateMail()
Dim objMail As Object
Set objMail = CreateItem(olMailItem)
objMail.Subject = "テストメール"
objMail.Display
End Sub
そして実行すると、、、メールが出来た!!
しかも件名が「テストメール」になってる。
改めてプログラムを見てみると、プログラムの意味が何となく分かると思います。「Subject」が件名なんですね。
この状態でコードの解説をしっかりと行い、先ほどのプログラムがどのような動きをするかバッチリ理解して頂きました。
この後、件名だけではなく、to宛先や本文の設定を習得し、With~End Withによる構文の省略記法、さらにはCC、BCC設定などを一通り習得しました。
これでメール作成はバッチリ!
(第1回)リボンの登録
作ったプログラムをリボンに登録する方法も習得しました。
これもExcel VBAとほぼ同じ操作ですが、リボンのユーザ設定からマクロを登録できます。
(以下画像はリボンに登録しているシーンです)
これでリボンにマクロを登録することが出来るので、ボタン一つでパッとメールを作成する機能の実装が完成です!
(第1回)OutlookVBAでメール保存
メールの保存についても、まずはプログラムを丸写ししてもらい、後から解説するスタイルを取りました。
最初に丸写しして頂いたプログラムはこちら。
Sub SaveMail()
Dim objMail As Object
Set objMail = ActiveExplorer.Selection.Item(1)
objMail.SaveAs "C:\Users\XXXXX\Desktop" & "\" & "テスト保存" & ".msg"
End Sub
(マーカの位置には自分のデスクトップアドレスを記入)
これを実行すると、デスクトップにOutlookで選択中のメールが「テスト保存.msg」という形で保存されます。
こちらもプログラムを実際に動かしてからコードを読むと、だいたい何をやっているか理解できます。
ただし、ActiveExplorer.Selectionのあたりが意味が分からないかと思います。
講座内では、この辺りもしっかりと解説し、Saveメソッドなどの使い方を習得しました。
(下の画像はデスクトップにメールを保存したシーン)
その上で、今日の日付フォルダを作り、その中にメールを保存するプログラムをみんなで作成しました。
このコードはFSOやWSHを使っているため、ちょっと複雑でしたが、FSOやWSHを初めて使う方にもコードを理解して頂けるように、とあるゲームを例えとして解説する方法でFSOやWSHにも入門して頂きました。
最後に、メールと添付資料を一気に保存するプログラムまで習得して頂き、明日から実務で使えるツールとして参加者の皆様に持って帰って頂きました!!
(第2回)OutlookVBAのオブジェクト構造
ここから第2回目の講座です。
OutlookにはExcelとは違い、「マクロの記録」という機能が無いため、どうやってプログラムを書いて良いか、そのハードルが高いように思います。
しかし、Outlookのオブジェクト構造を理解すれば、OutlookVBAでどのようにコードを書けばメール等から情報を抽出できるようになるか分かるようになります。
この講座では、ローカルウィンドウを使って、Outlookのオブジェクト構造を展開していき、自分の受信トレイやタスクトレイに到達する方法を習得しました。
(下図はオブジェクト構造を展開することを解説している図)
そして、オブジェクト構造を活用した情報抽出の方法を解説・習得し、演習として予定表アイテムの日時・件名を抽出する操作を実施しました。
予定表から時間を取得出来るようになったら、「今日」だけの予定表アイテムを抽出出来ます。
他にも件名を抽出できたら、その件名に特定の文字列が含まれている物だけを抽出できるようになります。
そのため、オブジェクト構造を理解しておくことは、OutlookVBAではかなり重要です。
オブジェクト構造の習得の最後に、今日の予定をパッと一覧にするツールをみんなに作って頂きました。
メール→予定表に切り替える時、数十秒かかると思いますが、このツールをリボンに登録しておくと、1秒でパッとでますので、地味に便利なツールです。
これも明日からお仕事で使えるツールとして持ち帰って頂きました!
(下図がこのツールを実行した時に表示される画面です。リボン登録しておけば、地味に便利に使えます。)
さらに、プログラムを書き移すことはしませんでしたが、次のコードも紹介し、持ち帰り頂きました。
・その日の予定表のアイテムを抽出してメールを下書きするプログラム(リモートワークの朝の作業連絡メール用)
・その日の完了タスクを抽出してメールを下書きするプログラム(日報メール用)
(第2回)OutlookVBAでタスク・予定表作成
第1回ではメールの作成を習得しましたが、第2回ではタスク・予定表の作成するプログラムを習得しました。
こちらもまずは基本コードの書き写しからです。
以下がタスクを作成する基本コードです。
Sub MakeSampleTask()
Dim appOL As Object
Set appOL = Outlook.Application
Dim objTask As Object
Set objTask = appOL.CreateItem(olTaskItem)
With objTask
.Subject = "タスク件名"
.Body = "サンプル"
.Display
End With
End Sub
以下が予定表を作成する基本コードです。
Sub MakeSampleSchedule()
Dim appOL As Object
Set appOL = Outlook.Application
Dim objSchedule As Object
Set objSchedule = appOL.CreateItem(olAppointmentItem)
With objSchedule
.Subject = "予定件名"
.Start = "2024/10/20 10:00"
.Body = "サンプル"
.Display
End With
End Sub
講座では、もっと細かいプロパティを設定するコードの学習も行い、タスク・予定表の作成を完全に理解して頂きました。
メールとは違い、タスクや予定表の作成は、それ単品ではあまり便利に使うことはないと思います。
ですが、第3回のイベントマクロ等と組み合わせることで、「依頼メールを送ったら、その回収フォロー作業をタスク登録」等が出来るようになりますので、どんどん便利なものを作ることが出来るようになります。
(第3回)ExcelでOutlookVBAを使う
ここから第3回の解説です。
ExcelでOutlookVBAを呼び出すことで、Excelでメールを作るツールを作ることが出来ます。
これが本当に便利で、筆者もずっと使っています。
この講座では、ExcelでOutlookVBAを呼び出す方法として、まずはOutlookのオブジェクトライブラリを参照設定する方法を使うこととし、その設定方法を解説しました。
(下図はOutlookのオブジェクトライブラリを参照設定をしているシーン。ちなみにここの参照ライブラリは間違いやすいことも解説しています。Microsoft Office 16.0 Object Library間違ったり、チェックボックスにチェックを入れずにクリックしただけでOKを押してしまう事が「あるある」です。ご注意ください。)
ちなみに、ExcelからOutlook Applicationを呼び出すのは、もう一つ別の設定方法があるのですが、参照設定を使う方がolMailItemなどのolシリーズを使えて第1回、第2回で学んだことをそのまま使えることから、筆者は参照設定を使う方法でまずは習得したら良いかなと思っています。
さて、この設定が終わったら、Excel VBAで次のコードを記載して実行して頂きました。
Sub CreateMail()
Dim appOL As Object
Set appOL = Outlook.Application
Dim objMail As Object
Set objMail = appOL.CreateItem(olMailItem)
objMail.Subject = "エクセルでメール作成"
objMail.Display
End Sub
実行すると、、、Outlookのメールウィンドウが立ち上がり、メールが作成されます!
(下の図は作成されたメール。①の通り件名も記載されている)
このようにExcelからOutlookを操ることが出来ます。
講座ではコードの解説も行って、なぜこのような動きをするのか完全に理解して頂きました。
その後、Excelで「ボタン一つでメールを作るツール」をみんなで作成し、明日から使える便利ツールとしてお持ち帰り頂きました。(下図がExcelメールツール)
このツールが本当に便利で、筆者は毎月定型的にちょっとずつ変更しながら送信しないといけなかったメールはこのエクセルツールで15秒で作るようにしていました。
受講メンバーの皆様には、明日から活用して頂けたら嬉しいと思っています!!
(第3回)OutlookVBAのイベントマクロ
最後にはOutlook VBAの奥義「イベントマクロ」の基礎技術をみんなで手を動かしながら習得しました。
まず、イベントマクロは「ThisOutlookSession」に記述する必要があります。
そして、オブジェクトボックスとプロシージャボックスを使います。
オブジェクトボックスにApplication、プロシージャボックスにItemSendを選ぶ(実際にはデフォルトで勝手に選ばれる)と、コードが現れます。これがイベントマクロです。
このイベントはItemSendであり、すなわち「メールを送った時」に動作するマクロになります。
講座では、ここを次のようにプログラムを書いて、メールを送ってもらう操作をして頂きました。
さあ、どうなるでしょうか?
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Cancel = True
End Sub
はい。メールを送れません!
ウイルスのようなマクロの出来あがりです!!
これは、イベントマクロの第2引数である「Cancel」をTrueにすると、「メールをキャンセルする」という動作をするようになるためです。
一度、コードを書き移してイベントマクロが動くところを体験型で学習すると、非常に理解が深まります。
この後、第1引数であるItemの解説や、Cancelのちゃんとした使い方などを解説し、「メールを送信した時」のイベントマクロを習得して頂きました。
その後、メールを受信した時のイベントマクロについても体験型で学習し、習得頂きました。
以上の3回でOutlookVBAをバッチリ習得出来ます。
後はOutlookVBAで便利なマクロをどんどん作っていきましょう!
おわりに
この記事は2024年9月に行った「OutlookVBA」講座について紹介致しました。
この記事はかなり割愛して記載しています。
実際の講座で是非一緒に学習しましょう!!
みなさまのご参加をお待ちしております!
お問い合わせリンクはこちら