遅延配信のルールを無効化して送信するマクロ


誤送信防止のために Outlook の送信時のルールを使って数分の遅延配信を設定する場合がありますが、時としてこの設定を無視して直ちにメールを送りたいということがあります。
そのような時に考えられる回避策の一つは除外条件を設定するというものですが、条件を設定するのが難しく、意図せず条件に合致してしまって遅延配信されないという事態が起こりえます。
また、送信の際に一時的に遅延配信のルールを無効にして送信するという方法もありますが、うっかり有効に戻すのを忘れてしまうという可能性もあります。

そこで、ルールの無効化と再有効化を行うマクロを作ってみました。
マクロは以下の通りです。DEFERRED_SEND_RULE に遅延配信を行うルールの名前を指定してください。SendImmediate を実行すると遅延配信ルールを無効にして編集中のメッセージの送信を実行し、メッセージが送信トレイに入ったらルールを再び有効にします。

' ここをトリプルクリックでマクロ全体を選択できます。
Dim WithEvents myOutboxItems As Items
' ただちに送信をするためのマクロ
Public Sub SendImmediate()
    ' 遅延配信ルールを無効にする
    SetDeferredSendRule False
    Set myOutboxItems = Session.GetDefaultFolder(olFolderOutbox).Items
    ' 編集中のメールを送信
    ActiveInspector.CurrentItem.Send
End Sub
' 送信トレイにアイテムが保存されたらルールを有効にする
Private Sub myOutboxItems_ItemAdd(ByVal Item As Object)
    SetDeferredSendRule True
End Sub
' 遅延配信のルールのオン/オフを設定
Private Sub SetDeferredSendRule(bEnable As Boolean)
    Const DEFERRED_SEND_RULE = "遅延配信" ' 遅延配信ルールの名前を指定
    Dim objStore As Store
    Dim colRules As Rules
    Dim objRule As Rule
    Set objStore = Session.GetDefaultFolder(olFolderInbox).Store
    Set colRules = objStore.GetRules()
    For Each objRule In colRules
        If objRule.Name = DEFERRED_SEND_RULE Then
            objRule.Enabled = bEnable
            colRules.Save
        End If
    Next
End Sub

マクロの登録方法やメニューへの追加について

広告

遅延配信のルールを無効化して送信するマクロ」への7件のフィードバック

  1. いつも楽しみに拝見しています。

    ”遅延配信のルールを無効化して送信するマクロ ”で下記のような現象が出ています。
    お手数ですが、対処方法をご教授願います。

    現象:OUTLOOK 2007 で、本マクロを登録しコンパイルを行うと以下のコンパイルエラーとなります。

    エラーメッセージ:コンパイルエラー:
     SubまたはFunction の属性が適切ではありません。

    対象行:Dim WithEvents myOutboxItems As Items

    • Dim WithEvents の行は VBA エディタで一番上にあるでしょうか?
      もし、すでにいくつかマクロが登録されているのであれば、Dim WithEvents の行だけ一番上に移動してみてください。

      • 回答が遅くなり申し訳ありませんでした。
        ご指摘のように、DIM WithEvents の行を先頭移動したところエラーが解消しました。
        ありがとうございますた。

  2. いつもありがとうございます。
    こちらのマクロ、便利そうなので試させて頂いたところ、

    実行時エラー: ’91’
    オブジェクト変数またはWithブロック変数が設定されていません

    とエラーが出て、デバッグをすると下記がハイライトされます:

    ActiveInspector.CurrentItem.Send

    この場合どのように修正すべきかご教授頂けないでしょうか。
    お手数ですが宜しくお願い致します

    • 度々失礼いたします。
      上記投稿した件ですが、 DEFERRED_SEND_RULE = “遅延配信” を 遅延送信 と読み間違えており
      私がもっているルール「遅延送信」と置き換えたらうまくいきました。

      ただこのマクロを入れたところOutlookの動きが悪くなり、具体的にはメール作成時、送信ボタンを押した時に30秒ほどフリーズが起きるようになりました。
      そのフリーズがあけたあと、実際にメールが送信されたり、再度マクロを実行するとメールが送られるような状態です。
      もし何か対処方法がありましたらご教授頂けると助かります。

      環境はOffice Professional Plus 2013で、職場で使用しています。
      宜しくお願い致します

      • このマクロでは一時的にルールの設定を変更していますが、ルールの数が多い場合には変更後の保存で時間がかかるため、応答がなくなると考えられます。
        残念ながらこの場合には有効な回避策はないようです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中