0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

OUTLOOK VBA オブジェクトまとめ Store オブジェクト補足 StoreオブジェクトはVBSで使用できる

Last updated at Posted at 2017-04-03

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オブジェクトは使用できる

mailCount.VBS
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 というメールアドレスなら

MailItemCount.VBS
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が優先されるので、うっかり削るのを忘れても安全です(ただし削除が原則です)
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?