今回はOutlook VBAについて説明します。
Outlook VBAはほかのOffice系ソフトのような詳しい説明や書籍がなく、少し書いてあきらめたりわからないままサイトのコードを転用しがちです。
ただオブジェクトの構造を理解すれば非常に書きやすくなります。その為今回はその部分をできるかぎりわかりやすく説明したいと思います。
なお本来の意味と異なるところもありますがわかりやすくという観点で書いていますのでご容赦ください。
まず今回の結論です。OutlookのオブジェクトとしてはApplicationオブジェクトとその下にある4つのオブジェクトをおさえればOKです。またそれぞれにオブジェクトの操作方法が決まっているのでそれを覚えればOutlookでのVBA操作は非常に楽になります。
この記事の構成
Outlookの操作においては以下の2つを理解しておけばよいと思います。
- Outlookでの代表オブジェクト
- 各オブジェクトの取得・操作
なおExcel VBAでOutlookを使う際は参照設定をいれたほうがいいのでそちらも説明します。
Outlookでの代表オブジェクト
まずは代表オブジェクトについて説明します。
イメージは以下になります。
それぞれについて説明します。
Applicationオブジェクト
Outlook というアプリケーション ソフトそのものをあらわすオブジェクトです。エクセルから操作する場合は必ず必要になります。
新規アイテムオブジェクト
Outlookで新たに作成されるアイテム(メール、予定表、連絡帳)を指します。
新規作成などに関連してきます。
NameSpaceオブジェクト
Outlookのデータ(メール、予定表、連絡帳等)が格納されているところを指します。
データの取得などに関連してきます。
Explorerオブジェクト
メイン画面の表示を行っているExplorer自体を指します。
Explorer自体の情報の取得や操作に関連してきます
Inspectorオブジェクト
メイン画面以外で表示されているアイテムを指します。
現在表示されているウィンドウに関する操作に関連してきます。
このようにOutlookでのオブジェクトは大きく4つがあることがわかります。
これらの存在を覚えておけばOKです。
各オブジェクトの取得、操作
次にオブジェクトの取得と操作方法について説明します。
Outlookの操作はOutlookアプリケーションの取得を最初として先ほどの4つのオブジェクトのどれかを取得することから始めます。
なおその取得方法はメソッドによる取得が主です(やや乱暴ですがExplorerとInspectorオブジェクト以外はメソッド一択です。その為Application.メソッドというコードがメインになります)。
Applicationの取得方法
以下の2通りの方法で取得できます。後々のことを考えると参照設定ありの方が無難かもしれません(以前の記事では参照設定なしで説明してますが・・・)
'Outlookアプリケーションの取得(参照設定あり)
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
'Outlookアプリケーションの取得(参照設定なし)
Dim objOutlook As Object
Set objOutlook = CreateObject("Outllook.Application")
新規アイテムの取得方法
新規アイテムはCreateItemメソッドで取得することができます。例として新規メールの取得をします。
'Outlookアプリケーションの取得(参照設定あり)
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
'CreateItemメソッドによるMailItemの作成()
Dim objMail As Outlook.MailItem
Set objMail = objOutlook.CreateItem(olMailItem)
CreateItemメソッドの引数は以下が例としてあります。
引数 | 内容 |
olMailItem | メール |
olAppointmentItem | 予定表 |
olContactItm | 連絡先 |
olTaskItem | ToDoリスト |
NameSpaceオブジェクトの取得方法
Outlookに関するデータ一式はGetNameSpaceメソッドで取得することができます。引数はMAPI一択になります。
MAPIはデータフォルダへアクセスするためのインターフェースということですが細かいことは気にせずNameSpaceオブジェクトで取得できるのはMAPI一択と覚えておけばいいと思います。
'Outlookアプリケーションの取得(参照設定あり)
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
'GetNameSpaceメソッドによるNameSpaceオブジェクトの取得
Dim myNameSpace As Outlook.Namespace
Set myNameSpace = objOutlook.GetNamespace("MAPI")
’すでにOutlookが開いている場合はSessionでも可
なお以降のフォルダはGetDefaultFolderメソッドで取得することができます。例として受信ボックスの取得をします。
Dim myFolderInbox As Namespace.Folder
Set myFolderInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
GetDefaultFolderメソッドの引数は以下が例としてあります。
引数 | 内容 |
myNameSpace.GetDefaultFolder(olFolderInbox) | 受信ボックス |
myNameSpace.GetDefaultFolder(olFolderOutbox) | 送信ボックス |
myNameSpace.GetDefaultFolder(olFolderSntbox) | 送信済みボックス |
myNameSpace.Folders(“Name”) | Nameボックス(上3つと同階層のフォルダに限る) |
Explorerオブジェクトの取得方法
メイン画面の取得はActiveExplorerメソッドで取得することができます。
'Outlookアプリケーションの取得(参照設定あり)
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
'ActiveExplorerメソッドによるExplorerオブジェクトの取得
Dim myExplorer As Outlook.Explorer
Set myExplorer = objOutlook.ActiveExplorer
基本的にExplorerは一つなのでこの方法で問題ありません(と思います)。
Inspectorオブジェクトの取得方法
現在開いているアイテムはActiveInspectorメソッドで取得することができます。
'Outlookアプリケーションの取得(参照設定あり)
Dim objOutlook As Outlook.Application
Set objOutlook = New Outlook.Application
'ActiveInspectorメソッドによる現在表示しているウィンドウの取得
Dim myInspector As Inspector
Set myInspector = objOutlook.ActiveInspector
この方法で現在開いているメールに対して操作することなどができます。
ここでのまとめ
今回4つのオブジェクトとその取得、その操作方法を説明しました。
これらを覚えておくとOutlookにおけるVBAの可読性が高まり、以降のOutlookでの読み、書きの操作が非常に楽になります。
以下の操作も上の4つのオブジェクトの取得からすべて作成することができます。具体的なコードは今後説明していきたいと思います。
新規メールを立ち上げる・・・新規アイテムオブジェクトを取得する
Outlookメールを送る方法についてはこちら
受信メール一覧を取得する・・・NameSpaceオブジェクトを取得する
Explorerの中のフォルダを選択する・・・Explorerオブジェクトを取得する
表示中のアイテムに対して操作する・・・Inspectorオブジェクトを取得する
こういった視点でVBAを眺めてもらうと理解も楽になるのではないかと思います。
コメント