みなさまこんにちは、ノグチです。
エクセルVBAでOutlookを操作する方法を、何度かの記事に渡ってご紹介しています。
前回までは、エクセルシートの内容をメールで送信したり、連絡先に登録する方法をご紹介してきました。
お仕事をしていると、あるプロジェクトや取引先、チームなどに関連するメールだけをエクセルシートに書き出したいな…ということ、ありませんか?
或いは、アンケートの回答をメールで送信してもらったりして、それをエクセルシートに並べてみて分析したい…なんてこともあるかもしれません。
それ、VBAを使えば自動化できるかもしれませんよ。
ということで今回からは、エクセルVBAからOutlookのメールフォルダにアクセスして、フォルダ内のメールの内容をエクセルシートにリストとして出力する方法を、順を追ってご紹介していきます。
今回は、そのメールフォルダへアクセスする準備として、GetNamespaceメソッドでOutlookのNamespaceオブジェクトの取得する方法をご紹介します。
Namespaceオブジェクトとは
さて、最初にメールフォルダの中身をエクセルシートに書き出す、と言いましたが、そのためにはまずメールのデータが格納されているフォルダにアクセスしなければいけませんね。
そのために使うのがOutlookApplicationオブジェクトのNamespaceオブジェクト。
Namespaceオブジェクトは、Outlookのメールや予定表、連絡先といった様々なデータにアクセスすることができるオブジェクトです。
GetNamespaceメソッドでNamespaceオブジェクトを取得する
このNamespaceオブジェクトを取得するには、OutlookApplicationオブジェクトのGetNamespaceメソッドを使います。
記述方法はこちら。
引数には、取得したいNamespaceの型を指定する…のですが、現在のところ指定できるのはOutlookのMesseging Application Programming Interface(メッセージアプリケーションの構造)を表す“MAPI”だけですので、記述方法をそのまま覚えてしまうといいですね。
このメソッドを使うことで、Outlookで設定されているアカウントのメール、予定表、連絡先などのデータが格納されているフォルダにアクセスすることができます。
実際にコードにしてみると、こんな感じになります。
Sub GetmailFolder() Dim objOutlook As Outlook.Application Dim myNamespace As Outlook.Namespace Set objOutlook = New Outlook.Application Set myNamespace = objOutlook.GetNamespace("MAPI") Stop End Sub
取得したNamespaceオブジェクトを確認する
上のコードを実行して、NamespaceオブジェクトでOutlookのデータが取得できているかを確認しましょう。
Namespace型変数のmyNamespaceの内容を確認してみます。
色々なプロパティがありますが、分かりやすいところで、メールフォルダの名前が取得できているかを見てみると…
この通り、メールフォルダの名称が取得できています。
Namespaceオブジェクトが取得できるプロファイル
このGetNamespaceメソッドを実行すると、Outlookで既定のプロファイルになっているプロファイルのデータを取得します。
Outlookには、複数のプロファイルを指定することができるようになっていますね。
「Outlookのプロファイルって何?」という方は、下記のページが参考になるかもしれません。
MicroSoft Outlook 電子メール プロファイルの概要
例えば、「Aさん」と「Bさん」が1台のPCを共有しているとしましょう。(PCのログオンユーザーも同じ)
Outlookでは、「Aさん」用のメール、予定表、連絡先等のデータを、「Bさん」用のOutlook用のデータを、それぞれプロファイルとして保持することができます。
Outlookを起動した時に「Aさん」のプロファイルを選んでOutlookを起動した場合、「Bさん」のメールや予定表等は見ることができません。
逆も然りです。
Outlookでは各プロファイルそれぞれにメール、連絡先、予定データが作られますが、GetNamespaceメソッドを実行した時取得できるNamespaceオブジェクトは、既定のプロファイルのデータを取得します。
「Aさん」のプロファイルがOutlookの規定プロファイルになっていてGetNamespaceメソッドを実行した場合、「Aさん」のデータが取得されます。
Microsoft Outlook 16.0 Object Libraryの参照設定を忘れずに
ここまでNamespaceオブジェクトやGetNamespaceメソッドをご紹介していますが、これらはVBEでMicrosoft Outlook xx.x Object Libraryの参照設定が必要です。
参照設定をしないまま上の記述方法やコードを書いても、コンパイルエラーになってしまいます。
設定方法はこちらの記事でご紹介していますので、併せてご覧ください。
最後に
今回は、Namespaceオブジェクトと、GetNamespaceメソッドによるNamespaceオブジェクトの取得方法をご紹介しました。
次回は、このNamespaceオブジェクトとメソッドやプロパティを使って、Outlookの受信メールフォルダとそのサブフォルダにアクセスする方法をご紹介していきたいと思います。
それでは、最後までお読みいただきありがとうございました!
連載目次:エクセルVBAでOutlookを操作してみよう!
エクセルVBAでOutlookのメール作成、送信などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。
- 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
- 【エクセルVBA】Outlookでメールを作成・送信する方法
- 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
- エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
- エクセルVBAでOutlookの連絡先を登録する方法
- 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
- エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
- エクセルVBAでOutlookの受信メールをワークシートに書き出す方法