• ベストアンサー

VBSでメール件数カウント

はじめまして。 VBSでOutlookのメール件数(たとえば受信ボックスの)を数えるには、 どうすればよいかどなたか教えて下さい。 メール送信は探せばたくさん見つかったのですが、 (CreateObject("CDO.Message") をつかうみたいです) 件数はどのようなものを使えばよいでしょうか? 乱文にて申し訳ございませんが、 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Microsoft Outlook であれば参考URLを。.NET用のコードですが、COMクラスを使ったものなのでVBSからでもいけるはずです。 オブジェクトとメソッドを調べる手がかりにはなるかと。 VBSでは参照設定が使えないので Dim oApp As Outlook.Application = New Outlook.Application() となっている部分はCreateObjectで。 Dim oApp As Outlook.Application Set oApp = CreateObject("Outlook.Application") Outlook Express の場合は、タイプライブラリが非公開になっているので、外部からアクセスする手段はないっぽいです。

参考URL:
http://support.microsoft.com/kb/313795/ja
aru_008
質問者

お礼

ご回答ありがとうございます。 オブジェクトとメソッドが調べにくいですが、 とりあえず、この情報で何とか調べてみます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

小生はこの辺は経験なく、判ってないのですが、 http://www.microsoft.com/japan/technet/scriptcenter/resources/officetips/oct05/tips1013.mspx をヒントに エクセルVBAの標準モジュールに Sub test01() 'Const olFolderInbox = 5 On Error Resume Next For i = 1 To 20 Set objDictionary = CreateObject("Scripting.Dictionary") Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set objFolder = objNamespace.GetDefaultFolder(i) MsgBox objFolder.Name Set colItems = objFolder.Items MsgBox colItems.Count For Each objItem In colItems MsgBox objItem strDate = FormatDateTime(objItem.SentOn, vbShortDate) If objDictionary.Exists(strDate) Then objDictionary.Item(strDate) = objDictionary.Item(strDate) + 1 Else objDictionary.Add strDate, "1" End If Next colKeys = objDictionary.Keys For Each strKey In colKeys MsgBox strKey & "," & objDictionary.Item(strKey) Next Next i End Sub を入れて実行してみました。私の場合OLはほとんど使ってないので テスト確認が十分出来ません。Msgboxの部分はセルに値セットなどを考えてください。 MsgBox colItems.Count  が件数ではないでしょうか。 何かの参考になれば。 ーー 上記のolFolderInbox の意味は Sub test02() On Error Resume Next For i = 1 To 20 Set objDictionary = CreateObject("Scripting.Dictionary") Set objOutlook = CreateObject("Outlook.Application") Set objNamespace = objOutlook.GetNamespace("MAPI") Set objFolder = objNamespace.GetDefaultFolder(i) Cells(i, "A") = i & "=" & objFolder.Name Next i End Sub で調べられました。 結果はフォルダ名のIDのようです。 1=なし 2=なし 3=削除済みアイテム 4=送信トレイ 5=送信済みアイテム 6=受信トレイ 7=受信トレイ 8=受信トレイ 9=予定表 10=連絡先 11=履歴 12=メモ 13=仕事 14=アラーム 15=アラーム 16=下書き 17=下書き ・・

aru_008
質問者

お礼

ありがとうございます。 imogasi さんの回答を参考に、何とか作ることができました。 ------------------------------------------------------------- Option Explicit Dim objShell Dim oApp Dim oNS Dim oInbox Dim oItems Dim i Dim j Set objShell = WScript.CreateObject("WScript.Shell") Set oApp = CreateObject("Outlook.Application") Set oNs = oApp.GetNameSpace("MAPI") For i = 1 To oNS.Folders.Count Set oInbox = oNS.Folders.Item(i) For j = 1 To oInbox.Folders.Count Set oItems = oInbox.Folders.Item(j) msgbox oItems.Name & ":" & oItems.Items.Count,,oNS.Folders.Item(i).Name next next Set oItems = Nothing Set oInbox = Nothing Set oNs = Nothing Set oApp = Nothing Set objShell = Nothing ------------------------------------------------------------- 受信フォルダだけなら、objNamespace.GetDefaultFolder(6) でもってこれました。 これで解決としたいと思います。 みなさまありがとうございました。

関連するQ&A