OUTLOOK VBA オブジェクトまとめ - QIIQ via Qiita
では検証できなかった、Store Object について補足します
##Store.GetSpecialFolder
Store.GetSpecialFolder メソッド (Outlook)
olSpecialFolderAllTasks = 0
[すべてのタスク] 検索フォルダー。
olSpecialFolderReminders = 1
[アラーム] 検索フォルダー。
これは正直アラームの設定が複雑な時に使えそうだが、具体的な使用方法はPHPで使用されている程度である。
How to get Microsoft Outlook reminder event list on webpage by PHP? - codingdir.com
Store object can use Vbs with some notes ストアオブジェクトはVBSでつかえるが…
以下のVBSは保存先フォルダの受信トレイ(受信トレイのサブフォルダはカウントしていない)のメールの数をカウントするVBS
つまりVbscriptでもStoreオブジェクトは使用できる
Option Explicit
Dim oApp: Set oApp = CreateObject("Outlook.Application")
Dim NS: Set NS = oApp.GetNamespace("MAPI")
Dim olStores, olStore, oRoot, olFolders, olFolder
Set olStores = NS.Stores
Set olStore = olStores("保存先")
Set oRoot = olStore.GetRootFolder
Set olFolders = oRoot.folders
Set olFolder = olFolders("受信トレイ") '定数ではなく具体的なフォルダ名
MsgBox olFolder.Items.Count
Set NS = Nothing
Set oApp = Nothing
保存先フォルダの場合の注意点
Store.GetDefautlfolderは無効
とりあえず当方が確認したOutlook 2013では
Set olStore = olStores("保存先")
のように保存先フォルダを指定した時は、
Set olFolder = olStore.GetDefaultFolder(6)
Set olFolder = olFolders(olFolderInbox)
は無効である。
定数ではなく具体的にフォルダ名指定すると初めて受信トレイ(受信メールフォルダ)に到達できる。
保存先フォルダの場合はフォルダの名前を具体的に指定する必要がある。
- 保存先のようなローカルのOutlookデータファイルの中ではolDefaultFolder定数は使用できない。
- よって、保存先の受信トレイは必ず次のように指定する
Set olStore = olStores("保存先")
Set oRoot = olStore.GetRootFolder
Set olFolders = oRoot.folders
Set olFolder = olFolders("受信トレイ")
通常のメールアカウントの場合
Store.Getdefaultfolderが有効
たとえばLastName.FirstName@Domain というメールアドレスなら
Option Explicit
Const olFolderInbox = 6
Dim oApp: Set oApp = CreateObject("Outlook.Application")
Dim NS: Set NS = oApp.GetNamespace("MAPI")
Dim olStores, olStore, oRoot, olFolders, olFolder
Set olStores = NS.Stores
Set olStore = olStores("LastName.FirstName@Domain")
Set olFolder = olStore.GetDefaultFolder(olFolderInbox)
MsgBox olFolder.Items.Count
このようにDefaultFolderで受信トレイに到達することができる。
Tips
####ENUMをConstで定義するメリット
-
今回は残念な結果でしたが、一般的には一つの確立したテクニックとして、VBScript、参照設定をしない場合のVBA、PowerShellではEnumで決まっている定数を(Global)のConstで定数化すると便利です。
Vbscript Always Usefull when enumulation decide constitution
For example たとえば
olFolderInbox 9
then
Const olFolderInbox = 9
これだと検索も効くのでオリジナルな定数名よりはるかに容易にネットのヘルプにも到達できます。 -
この定数の解説リンク Outlook.OlDefaultFolders
-
しかし上記サイトでは定数がいくつかはわかりません。MSDNではよくあることです。
####定数名がいくつかを調べる方法
- こうした時はOUTLOOKのVBEditorを起動し、イミディエイトウィンドウに次のように入力してReturnを押します
?olFolderInbox
- もしくはF2を押してオブジェクトブラウザを起動し olFolderInbox を入れて検索します。すると、3分割された画面の一番下に
Const olFolderInbox = 6
Outlook.OlDefaultFolders のメンバー
と出てきます。この6が定数の値です。
- VBAでは仮にこのあと参照設定しても、Constが優先されるので、うっかり削るのを忘れても安全です(ただし削除が原則です)