VBAで Outlookの予定表フォルダを取得する

2008/05/16

Categories: outlook

folders.png
※VBAで、といいつつJScript。

既定の予定表は、こんな感じでFolderオブジェクトを得られる(JScript)

var app = new ActiveXObject("Outlook.Application");
var ns = app.GetNamespace("MAPI");
var folder = ns.GetDefaultFolder(olFolderCalendar);

※olFolderCalendarは9

ここの環境は、以前、別のOffice環境から移行してきたデータファイルがあるため、左のように複数の予定表フォルダがある。これに対応するFolderオブジェクトを取得したい。(で、配下の予定表アイテムを列挙、といきたい)

FolderのEntryIDが事前に分かっていれば、NameSpaceから取得できるようなんだけど・・・。

「おれおれフォルダ→予定表」にあたるFolderオブジェクトのFolderPathは
 "\\おれおれフォルダ\予定表"
になることがわかったので、ルートから順番に辿ってパスで判断することに。



■folders.js

/**
 * Enum folders(and its itemtype) of Outlook(!=express).
 *
 * usage:
 *   cscript.exe folders.js
 *
 * Tried env.
 *   Outlook 2003 SP3 + XP Prof SP2(ja)
 *   Outlook 2007 SP1 + Vista Ultimate SP1 x64(ja)
 */

if( !WScript.FullName.match( /cscript\.exe$/i ) )
{
    WScript.echo( "run me under cscript.exe");
    WScript.Quit();
}

var app = new ActiveXObject("Outlook.Application");
var ns = app.GetNamespace("MAPI");

traverse( ns );

function    traverse( folder )
{
    if( folder.FolderPath )
    {
        WScript.echo( folder.FolderPath + ": " + folder.DefaultItemType );
    }
    else
    {
        WScript.echo( folder );
    }

    var folders = folder.Folders;
    for( var i = 1 ; i <= folders.Count ; i++ )
    {
        traverse( folders(i) );
    }
}


>> Home