VBA

Outlook(アウトルック)をVBAで操作しよう①Outlookの起動のさせ方と既に起動しているかどうか確認する方法

記事内に商品プロモーションを含む場合があります

このページでわかること

Outlookを立ち上げてメールを確認する画面を開くことができます。

Outlookが既に起動しているかどうか確認することができます。

覚えること

  1. NamespaceとGetNamespaceのお決まり構文
  2. getdefaultfolderの使い方:Outlookの内、受信メールや予定表など何を扱うか
  3. Explore.countの使い方:Outlookが何個開いているか

こんにちはhokkyokunです。

Outlookを本格的に扱っていきます。
準備がまだという方いらっしゃいましたら、こちらを先にご覧ください。
今回はメールを立ち上げてみます。
そして一度立ち上がっていたら、処理はしないようにする方法もご紹介します。

NamespaceとGetNamespaceのお決まり構文 (コピペOK)

お決まりの文です。
とりあえずこうやるんだで全然大丈夫です。
メールを立ち上げる前の準備としてコピペしてみてください。

Sub メール立ち上げの準備()
Dim outlookObj As New Outlook.Application
Dim myNamespace As Outlook.Namespace
Set myNamespace = outlookObj.GetNamespace("MAPI")

End Sub

Namespaceオブジェクトは
受信、送信メールや予定表、連絡先といったデータにアクセスするためのものです。

上記のように書くということで全然OKです。
これでOutlookのデータにアクセスできます。

getdefaultfolderメソッド

Outlookには受信メールや送信メール、予定表、連絡先などがあり、
どのデータにアクセスするかを選ぶ必要があります。

それが Namespaceオブジェクトの getdefaultfolderメソッド です。

構文:Namespaceオブジェクト.GetDefaultFolder(フォルダの種類)

引数にフォルダの種類を入れます。
よく使うものを表記します。

引数説明
olFolderInbox受信メール
olFolderSentMail送信済メール
olFolerCalendar予定表
olFolderContacts連絡先

Namespaceオブジェクト.GetDefaultFolder(フォルダの種類) .displayメソッドとすることで
表示することができます。

Sub メール立ち上げ()
Dim outlookObj As New Outlook.Application
Dim myNamespace As Outlook.Namespace
Set myNamespace = outlookObj.GetNamespace("MAPI")

myNamespace.GetDefaultFolder(olFolderInbox).Display

End Sub
Outlookが開き、メールが確認できました。

これやると結構驚かれます。
実はすごい簡単です。
プログラマーっぽいですよね笑

でも、一つ問題点があります。
使っているとわかるんですが、
プログラムを実行するたび、outlookが何個も生成されることになるので
面倒な状態になります。

Outlookが既に起動しているか確認する方法

Outlookがいくつ開いているか確認する方法があります。

Explorerオブジェクトを使用します。

構文: オブジェクト.Explorers 

特定のエクスプローラーを表す オブジェクトを取得できます。
今回の場合は
Outlookオブジェクト.Explorers.Countとcountを付けることで
Outlookのディスプレイの数を取得することが出来ます。

これらを組み合わせてプログラムを組みましょう。

Sub メール立ち上げ()
'Outlookオブジェクトのインスタンス生成
Dim outlookObj As New Outlook.Application

'NamespaceオブジェクトでOutlookのデータに接続
Dim myNamespace As Outlook.Namespace
Set myNamespace = outlookObj.GetNamespace("MAPI")

'Explorer.Countで既に起動しているOutlookオブジェクトの数を確認
Dim objCnt As Long
objCnt = outlookObj.Explorers.Count

'一個以上開いている場合はプログラム終了
If objCnt >= 1 Then
    Exit Sub
End If

'ディスプレイ表示
myNamespace.GetDefaultFolder(olFolderInbox).Display

End Sub

いかがでしょうか。

Outlookを起動させることができ、
さらに既に開いている場合は無限に起動させないようにしています。

次回受信フォルダからメールを取得してみたいと思います。