web-dev-qa-db-ja.com

VBAスクリプトを含むルールを使用してOutlookメールをフィルタリングする方法

ワイルドカードを使用した件名やメッセージ本文の検索など、デフォルトの電子メールルールを使用して特定のことができない。複数の単語を使用できますが、単語を1文字ずつ離す必要がある場合は同じではありません。 Outlook電子メールをフィルター処理する独自のVisual Basic for Applicationsコードをどのように記述できますか?

15
Grant Bowman

この単純なフィルターを実現するために必要なこれらすべてのパーツの高低を見ました。 Unix procmailフィルターは、比較すると非常に使いやすいです。すべてのMicrosoft Outlookウィザードは、ワイルドカードを使用した単純なフィルターの邪魔になります。マイクロソフトがデフォルトで提供する多くの電子メールフィルター条件は有用ですが、実行中のコードの柔軟性とカスタマイズに勝るものはありません。

  1. コードを記述します。

Alt-F11はVBAコードエディターを起動します。 ThisOutlookSessionをダブルクリックします。コードを記述します。私の場合、件名に正規表現を使用しており、それをDefaultFolderではなく、サブフォルダー内の自分のpstに移動しています。

Sub filter(Item As Outlook.MailItem)
    Dim ns As Outlook.NameSpace
    Dim MailDest As Outlook.Folder
    Set ns = Application.GetNamespace("MAPI")
    Set Reg1 = CreateObject("VBScript.RegExp")
    Reg1.Global = True
    Reg1.Pattern = "(.*Abc.20.*)"
    If Reg1.Test(Item.Subject) Then
        Set MailDest = ns.Folders("Personal Folders").Folders("one").Folders("a")
        Item.Move MailDest
    End If
End Sub
  1. ルールを使用して受信メールごとにコードを実行します。

ルールの下で、「ルールとアラートの管理...」を選択します。新しいルールは次のようになります

Apply this rule after the message arrives run Project1.ThisOutlookSession.filter

これを取得するには、ステップ1:条件の選択:次をクリックします。 [OK]をクリックして、すべてのメッセージに適用されることを確認します。 [アクションの選択]で[スクリプトを実行]をオンにしてから、フィルタースクリプトをクリックして選択し、[次へ]または[完了]を選択します。 [例外の選択]で、[次へ]または[完了]をクリックします。 vba-filterなどの適切な名前を付け、[このルールを有効にする]をオンにします。完了をクリックします。ローカルフォルダーに対応しているため、オンラインまたは別のデバイスから確認した電子メールに対してこのルールが機能しないことを確認するように求められたら、[OK]をクリックします。 [ルールと警告]ダイアログボックスで[OK]をクリックします。

  1. マクロが署名されていない場合、Outlookはそれを好みません。マクロに自己署名するには 証明書を作成して使用
13
Grant Bowman