次の方法で共有


Office Space: 受信トレイの未読メッセージ数をカウントする

Office Space

Office Space へようこそ。Office Space は、Microsoft® Office アプリケーションのスクリプト作成に関するヒントとテクニックを紹介する新しいコラムです。過去のヒントについては、Office Space アーカイブを参照してください。Microsoft Office でのスクリプト作成について質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

受信トレイの未読メッセージ数をカウントする

電子メール。これがあっては生きられないのか、それともこれがなくては生きられないのか。受信する電子メールの数が飛躍的に増えたため、人々は電子メールの使用を自動化して効率的にする方法を模索し始めています。ここで紹介する簡単なスクリプトが役に立つかもしれません。このスクリプトは、Outlook の受信トレイをチェックして、未読メッセージが何通あるかをカウントします。

Const olFolderInbox = 6

Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon "Default Outlook Profile", , FALSE, TRUE    
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

Wscript.Echo objFolder.UnreadItemCount

objOutlook.Quit

Microsoft Outlook に対するスクリプト作成で注意しなければならないのは、Microsoft Outlook のインスタンスは 1 つしか作成できないということです。Outlook を既に実行中である場合は、このスクリプトを実行しても新しいインスタンスは取得されません。そのため、既存のインスタンスにバインドすることになります。このことは、コードの最終行に辿り着くまでは、大きな問題ではありません。最終行で Outlook を終了させます。つまり、実行中の Outlook セッションが終了するということです。ここでは、Outlook を実行していないときにだけ、このスクリプトを実行すると仮定します。Outlook が実行中であるかどうかを判定して、その結果に応じてスクリプトを変更する方法については、次回以降のコラムで紹介します。

まず、olFolderInbox という名前の定数を定義し、値として 6 を代入します。この定数は、開くフォルダを指定するために使用されます (もうお気付きかと思いますが、olFolderInbox は受信トレイを意味します)。次に、Outlook のインスタンスを作成し、GetNamespace メソッドを使って MAPI 名前空間に接続します。パラメータとして "MAPI" を GetNamespace に渡す必要があります。このパラメータは、渡すことが可能な唯一のパラメータであり、Outlook はこれ以外の名前空間には接続できないことに注意してください。

次に、Logon メソッドを呼び出して、適切なプロファイルに接続したことを確認します。Logon メソッドには、次の 4 つのパラメータが必要です。

パラメータ

説明

Profile

接続する Outlook プロファイルです。このサンプル スクリプトでは、"Default Outlook Profile" を使用します。

Password

接続時に使用される任意設定のパスワードです。このパラメータは、主に下位互換性を保つために存在しているもので、ほとんどの場合は空白のままに設定されます。

ShowDialog

どのプロファイル選択ダイアログ ボックスを表示するかを指定します。

NewSession

新しい Outlook セッションを作成するかどうかを指定します。このスクリプトでは、Outlook は実行中でないことを前提としているため、新しいセッションを作成する必要があります。

適切なプロファイルに接続してから、GetDefaultFolder メソッドを使って受信トレイにバインドします (olFolderInbox を単一パラメータとして GetDefaultFolder に渡していることに注意してください)。後は UnreadItemCount の値を Echo 出力して、Outlook を閉じるだけです。

ところで、受信トレイのコレクションを返して、そのコレクションの Count プロパティを Echo 出力すれば、受信トレイにある既読と未読の両方の総項目数をカウントすることができます。この処理を実行するサンプル スクリプトを次に示します。

Const olFolderInbox = 6

Set objOutlook = CreateObject("Outlook.Application")

Set objNamespace = objOutlook.GetNamespace("MAPI")
objNamespace.Logon "Default Outlook Profile", , False, True    
   
Set objFolder = objNamespace.GetDefaultFolder(olFolderInbox)

Set colItems = objFolder.Items
Wscript.Echo colItems.Count

objOutlook.Quit