Outlookの店はアイテム、予定表アイテム、タスクなどのファイルにそれが店舗を呼び出しを郵送します。時折、人々はメールアイテムなどがPSTファイルに保存されていると言います。ただし、すべてのPSTファイルはストアですが、すべてのストアがPSTファイルではありません。
デフォルトは、メールアドレスのいずれかに送信されたメッセージが同じストアにロードされたときのことです。その状況では、デフォルトの受信トレイがその1つのストアにあったのでSet infldr = myNs.GetDefaultFolder(olFolderInbox)
が便利でした。
Outlook 2016およびその他の最新のバージョンでは、デフォルトではメールアドレスごとに別々の店舗があります。これらの店舗のそれぞれには、「[email protected]」や「[email protected]」などの電子メールアドレスの名前が付けられます。
Outlookのモジュールにコピーし、このマクロをし、それを実行します。私のシステムで
Sub DsplUsernameOfDefaultStore()
Dim NS As Outlook.NameSpace
Dim DefaultInboxFldr As MAPIFolder
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
Set DefaultInboxFldr = NS.GetDefaultFolder(olFolderInbox)
Debug.Print DefaultInboxFldr.Parent.Name
End Sub
を、このマクロの出力「Outlookデータファイル」。これはOutlookに付属しているデフォルトのストアでしたが、私の電子メールはそれにロードされていません。 XXXXはあなたが尋問したい受信トレイを含むストアの名前です
Set infldr = Session.Folders("Xxxx").Folders("Inbox")
:
次のようなものが必要になります。
以下、私は3つの代替マクロを使用して、受信トレイ内の重要度の高いメールの数をカウントしています。特記事項:
- バージョン1は私のコメントで提案したように
For Each
ループを使用しています。バージョン2はFor IndexVariable
ループを使用します。私の知る限り、どちらのタイプのFor
もどちらも優位ではありません。私は、手元にある作業にとってより便利に思えるものを使用します。バージョン3ではフィルタが使用されます。私はOutlookフィルターの使用を頻繁に見いだすことができませんでしたので、私は通常、For
ループを使用しています。 olImportanceHigh
は値が2の定数です。Restrict
文字列内で定数を使用することはできません。その理由は[Importance] = 2
です。
- 私は、開発中に
MsgBox
よりもずっと便利なDebug.Print
を見つけます。
必要に応じて自分のコードに関する質問に戻ります。
Option Explicit
Sub CountHighImportanceEmails1()
Dim FldrInbox As Folder
Dim MailItemCrnt As MailItem
Dim NumEmailsHighImport As Long
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
NumEmailsHighImport = 0
For Each MailItemCrnt In FldrInbox.Items
If MailItemCrnt.Importance = olImportanceHigh Then
NumEmailsHighImport = NumEmailsHighImport + 1
End If
Next
Debug.Print "Number of high importance emails=" & NumEmailsHighImport
End Sub
Sub CountHighImportanceEmails2()
Dim FldrInbox As Folder
Dim InxMi As Long
Dim NumEmailsHighImport As Long
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
NumEmailsHighImport = 0
With FldrInbox
For InxMi = 1 To .Items.Count
If .Items(InxMi).Importance = olImportanceHigh Then
NumEmailsHighImport = NumEmailsHighImport + 1
End If
Next
End With
Debug.Print "Number of high importance emails=" & NumEmailsHighImport
End Sub
Sub CountHighImportanceEmails3()
Dim FldrInbox As Folder
Dim MailItemsHighImport As Items
Set FldrInbox = Session.Folders("Xxxx").Folders("Inbox")
Set MailItemsHighImport = FldrInbox.Items.Restrict("[Importance] = 2")
Debug.Print "Number of high importance emails=" & MailItemsHighImport.Count
End Sub
だろう。 (1)デフォルトの受信トレイは、必要な受信トレイではありません。おそらく明示的にする必要があります。 (2) 'infldr.Items'はMailItemではなくMailItemの集合です。 'For each impMail In infldr.Items'のようなものが必要です。'重要な郵便物のテスト ''次。 –
また、 'ttlcount'と' ttlImp'変数を混在させました。しかし、最大の問題は、Forループの欠如です。 – finjo
申し訳ありません。私はまだこれについてかなり新しいことを学んでいます。これは私が一日中試した後に思いついたものです。 forループについては、制限やフィルタがうまくいかないでしょうか?私はどのようにして '' ttlcount = ttlcount +1 '' next' folder.item' 'かの項目=重要(olimportanthigh)のループの各項目の最大.. 'セットをに正確にはわかりません申し訳ありませんが、私はそれが見えると思うものの本当に原案です。 – Jonboy89