2017-06-21 9 views
1

誰かが私がここで紛失していることを指摘できますか?私がこれを実行するたびに、オブジェクトが必要であると言います。Outlook Count電子メールとして重要なマーク

私はこれが非常に簡単な修正だと感じますが、私はしばらく私の脳を壊しています。

私が達成しようとしているのは、重要度の高い電子メールがいくつあるかをカウントすることです。

もう一度このような単純なエラーがあるように感じますが、まだこれを学習しています。

Sub CheckForImportance() 

Dim myNs As Outlook.NameSpace 
Dim infldr As Outlook.Folder 
Dim impMail As Outlook.MailItem 
Dim ttlcount As Integer 

Set myNs = Application.GetNamespace("MAPI") 
Set infldr = myNs.GetDefaultFolder(olFolderInbox) 
Set impMail = infldr.Items 
Set ttlcount = 0 

If impMail.Importance = olImportanceHigh Then ttlImp = ttlImp + 1 

MsgBox ("count:" & ttlImp) 

End Sub 
+0

だろう。 (1)デフォルトの受信トレイは、必要な受信トレイではありません。おそらく明示的にする必要があります。 (2) 'infldr.Items'はMailItemではなくMailItemの集合です。 'For each impMail In infldr.Items'のようなものが必要です。'重要な郵便物のテスト ''次。 –

+0

また、 'ttlcount'と' ttlImp'変数を混在させました。しかし、最大の問題は、Forループの欠如です。 – finjo

+0

申し訳ありません。私はまだこれについてかなり新しいことを学んでいます。これは私が一日中試した後に思いついたものです。 forループについては、制限やフィルタがうまくいかないでしょうか?私はどのようにして '' ttlcount = ttlcount +1 '' next' folder.item' 'かの項目=重要(olimportanthigh)のループの各項目の最大.. 'セットをに正確にはわかりません申し訳ありませんが、私はそれが見えると思うものの本当に原案です。 – Jonboy89

答えて

0

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 
+0

さまざまな方法のおかげで、オプション1に似た何かを使ってこれを行うことができました。 debug.printはMsgBoxより高速ですか? – Jonboy89

+1

'MsgBox'では、Enterを押す前にメッセージを読み込んで記録する必要があります。 'Debug.Print'では、出力がイミディエイトウィンドウに書き込まれます。イミディエイトウィンドウには、マクロが終了した後、または便利なときにブレークポイントを使用して調べることができる約200行を保持します。必要なすべての診断情報が200行では不十分であれば、テキストファイルに書き込みます。 –

0

例は、あなたが、私は明白な問題に言及する自分自身を制限するので、エラーを与える声明言わない

Option Explicit 
Public Sub Example() 
    Dim Inbox As Outlook.folder 
    Set Inbox = Application.Session.GetDefaultFolder(_ 
            olFolderInbox) 

    Dim Filter As String 
     Filter = "[Importance] = 2" 

    Dim Items As Outlook.Items 
    Set Items = Inbox.Items.Restrict(Filter) 

    Debug.Print Items.Count 
    MsgBox Items.Count & " High importance Items are in " & Inbox.Name 

End Sub 
関連する問題