Outlook (全般)

Outlook 全般に関するフォーラムです。
Outlook Express、Windowsメールも含みます。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Outlook 2016)
Outlookの受信トレイ内を特定の件名で検索した結果をゲットしたい
投稿日時: 21/05/05 01:16:40
投稿者: U1ROU

はじめまして。
 
vbaを利用して特定の文字列を含むメールを検索して、最新の受信日時メールに返信するプログラムを作ってみようとしている初心者です。
 
色々検索して、以下のプログラムをvb editorに記載してF5実行してみたのですが、何事も無かった様に処理が終了してしまいます。
 
検索対象の”【定型ヘッダ】yyyymmdd特定の件名”というメールはRE: で始まるものも含めて複数テストデータを準備しているのですが、何も起きません。
 
Do Untilの所でブレークポイントを作って、ローカルウィンドウで確認したところOTが正常に取れていない様でAnswer Wizardが<操作は失敗しました。>と表示されてしまっているので、恐らく何かしらがエラーになっていると思うのですが、どなたか解決方法をご存じでしょうか?
 
Sub RestrictTableForInbox()
 
    Dim oT As Outlook.Table
    Dim strSubject As String
    Dim strFilter As String
    Dim oRow As Outlook.Row
      
    ' ////dtShortに現在日付からyyyy/mm/ddの文字列を取り付ける
    dtShort = FormatDateTime(Now, vbShortDate)
    ' ////件名中の日付はyyyymmdd形式で置き換えたいので、dtShortから"/"を消す。
    dtShort = Replace(dtShort, "/", "")
 
    strSubject = " ci_phrasematch '" + "【定型ヘッダ】" + dtShort + "特定の件名" + "'"
 
    ' ////フィルターを作る
    Const PropTag As String = "https://schemas.microsoft.com/mapi/proptag/"
    strFilter = "@SQL=" & Chr(34) & PropTag _
        & "0x0037001E" & Chr(34) & strSubject
      
    ' ////検索を実行して受信トレイ内の該当メールをテーブルに格納する
    Set oT = Application.Session.GetDefaultFolder(olFolderInbox).GetTable(strFilter)
      
    ' ////検索結果の件名を表示する
    Do Until oT.EndOfTable
        Set oRow = oT.GetNextRow
        Debug.Print oRow("Subject")
    Loop
 
End Sub

回答
投稿日時: 21/05/11 18:22:04
投稿者: Moko

こちらを参考にしたのでしょうか。
https://docs.microsoft.com/ja-jp/office/vba/outlook/how-to/search-and-filter/search-the-inbox-for-items-with-subject-containing-office
 
この辺りを参考にして単純な例でテーブルに抽出できました。
https://docs.microsoft.com/ja-jp/office/client-developer/outlook/pia/how-to-search-for-a-phrase-in-the-body-of-items-in-a-folder
https://vicugna-pacos.github.io/outlookvba/search-and-filter/
 

Sub RestrictTableForInbox()
 
    Dim oT As Outlook.Table
    Dim strSubject As String
    Dim strFilter As String
    Dim oRow As Outlook.Row
    
    Dim dtShort As String
      
    ' ////dtShortに現在日付からyyyy/mm/ddの文字列を取り付ける
    dtShort = FormatDateTime(Now, vbShortDate)
    ' ////件名中の日付はyyyymmdd形式で置き換えたいので、dtShortから"/"を消す。
    dtShort = Replace(dtShort, "/", "")
 
    strSubject = " ci_phrasematch '" + "【定型ヘッダ】" + dtShort + "特定の件名" + "'"
 
    ' ////フィルターを作る
    Const PropTag As String = "urn:schemas:httpmail:subject"
    strFilter = "@SQL=" & Chr(34) & PropTag & Chr(34) & strSubject
      
    ' ////検索を実行して受信トレイ内の該当メールをテーブルに格納する
    Set oT = Application.Session.GetDefaultFolder(olFolderInbox).GetTable(strFilter)
      
    ' ////検索結果の件名を表示する
    Do Until oT.EndOfTable
        Set oRow = oT.GetNextRow
        Debug.Print oRow("Subject")
    Loop
 
End Sub

実際のテストは単純に「お花見」というワードで検索しました。

トピックに返信