2016-03-25 16 views
0

次のコードを使用して電子メールを取得して確認していますが、Outlookは最新のものでもなく古いものでもない12/22最も古いメールを受信します。自動化中にOutlookが最新の電子メールを表示しない

Set oapp = CreateObject("Outlook.Application") 
Set oMAPI = oapp.GetNamespace("MAPI") 
Set oInbox = oMAPI.GetDefaultFolder(6) 
oInbox.Display 
Set oallmails = oInbox.Items 
Set oreqemail = oallmails.GetFirst 
For oTotalmail = 1 To oallmails.Count 
    ostringmatch = oreqemail.Subject 
    'Using regex function to match 
    'If MatchString(ostringmatch,"89554 Completed") Then 
    'End If 
'Exit For 
Set oreqemail = oallmails.GetNext 
Next 

私のコードは大丈夫ですが、見通し設定がありません。 ありがとう

+0

これはあなたの同僚のコンピュータでは動作しますが、あなたのパソコンでは動作しませんか?私はこれを最初に疑うでしょう:oInbox = oMAPI.GetDefaultFolder(6)を設定します。フォルダのレイアウトが異なる可能性があります。 – vbnet3d

+0

2番目の思いで... 12/22のメールはそのフォルダの中で最も古いメールですか? – vbnet3d

答えて

1

Outlookで常に最新のまたは最も古い電子メールを受け取るには、ItemsクラスのSortメソッドを使用する必要があります。指定されたプロパティでアイテムのコレクションをソートします。このメソッドが完了すると、コレクションのインデックスが1にリセットされます。ソートするプロパティの名前。大カッコで囲むことができます(例: "[CompanyName]")。

注:は、コレクション内のアイテムの順序にのみ影響します。エクスプローラビュー内のアイテムの順序には影響しません。

Set oapp = CreateObject("Outlook.Application") 
Set oMAPI = oapp.GetNamespace("MAPI") 
Set oInbox = oMAPI.GetDefaultFolder(6) 
oInbox.Display 
Set oallmails = oInbox.Items 
oallmails.Sort "[RecievedTime]" 
Set oreqemail = oallmails.GetFirst 
For oTotalmail = 1 To oallmails.Count 
    ostringmatch = oreqemail.Subject 
    'Using regex function to match 
    'If MatchString(ostringmatch,"89554 Completed") Then 
    'End If 
    'Exit For 
    Set oreqemail = oallmails.GetNext 
Next 

詳細については、Outlook VBA: How to sort emails by date and open the latest email found?を参照してください。

+0

ありがとう、私は、ソート方法はQTP(私が使用しているツール)の見通しのために構築されていないと思う。実行時に無効なプロパティが表示されます。私は多くのデュデーテ、UnReadなどの組み合わせを試しましたが、うまくいきませんでした。とにかく、コードを変更して、最新の電子メールを取得して正しくループさせるようにしました.-行7 - oreqemail = oallmails.GetLastを設定してください。最後に2行目を設定します。oreqemail = oallmails.GetPreviousを設定します。 – Harman

関連する問題