MENU

仕分けルールからマクロを実行する方法 | OutlookVBA

以下の方向けの記事になります
  • Outlookにて仕訳ルール実行時にマクロを実行したい
  • OutlookVBAからExcelVBAを実行したい
目次

仕分けルールからマクロを実行する方法

初期状態では仕訳ルールからマクロを実行することが出来ません。

そのため、以下の手順にてレジストリエディターを変更する必要があります。

レジストリエディタの設定方法

レジストリエディターは、Windowsキーを押し「reg」と打ち込むと出て来ます。

レジストリエディタを開いた後は、下の画像、及び表を参考に、新規の値を作成します。

パラメータ
Outlook 2016 の場合HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Security\
Outlook 2013 の場合HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security\
値の名前EnableUnsafeClientMailRules
値の種類REG_DWORD
値のデータ1
レジストリエディタ変更点

変更がうまく行けば画像のように選択する事ができます。

スクリプトをクリックすると、マクロが選択できる

仕分けルールから実行するための条件

仕訳ルールで呼び出すためには、以下の様にMailItem「のみ」を引数としている必要があります。

Public Sub プロシージャ名(ByRef メール変数名 As MailItem)
    '処理
End Sub


'以下のように、引数が1つではない場合、「スクリプト」から選択できない。
'Public Sub プロシージャ名(ByRef メール変数名 As MailItem, hoge as String)
'hoge = "動かないよ"
'End Sub

'Public Sub プロシージャ名()
'hoge = "動かないよ"
'End Sub

【例】仕分けルール→添付ファイルを保存

仕訳ルール+OutlookVBAの使用例になります。

コード

Sub saveAttachments(getMailItem As MailItem)
    
    Dim strPath, strFile As String
    strPath = "C:\attachments\" '添付ファイル保存フォルダ
    
    With getMailItem
        If .Attachments.Count <> 0  Then
            For i = 1 To .Attachments.Count
                strFile = strPath + .Attachments.Item(i)
                .Attachments.Item(i).SaveAsFile strFile
            Next i
        End If
    End With
End Sub

挙動

STEP
仕訳ルールのスクリプトよりマクロが実行される

実行された際のメールが、コード中のgetMailItemオブジェクトとなります。

STEP
strPathに保存される

添付ファイルの数だけループを回し、strPathに保存します。

【例】仕分け→添付のエクセルファイルを開く→ExcelVBAマクロ実行

仕訳ルール+OutlookVBA+ExcelVBAの応用例となります。

コード

使い方、及び挙動の解説は下に記載します。

Sub runExcelMacroOnAttachedfile(getMailItem As MailItem)

    Dim excelMacroPath, excelMacroModuleName, excelMacroMacroName As String
    excelMacroPath = "" 'ex "C:\Users\Chelo\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB"
    excelMacroModuleName = "" 'ex "Module1"
    excelMacroMacroName = "" 'ex "Macro1"
    
    'set Excel Application
    Dim objExcel As Excel.Application
    Dim excelMacroWorkbook As Workbook
    Set excelMacroWorkbook = VBA.GetObject(excelMacroPath)
    Set objExcel = excelMacroWorkbook.Application
    
    'set temp folder path
    Dim FSO As Object
    Dim tempPath As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO
        tempPath = .GetSpecialFolder(2) & "\" & .GetBaseName(.GetTempName) & ".xlsx"
    End With
    
    'run Excel Macro
    Dim openWorkbook As Workbook
    With getMailItem
        If .Attachments.Count <> 0 Then
            For i = 1 To .Attachments.Count
                If .Attachments.Item(i) Like "*.xls*" Then
                    .Attachments.Item(i).SaveAsFile tempPath
                    Set openWorkbook = objExcel.Workbooks.Open(tempPath)
                    openWorkbook.Activate
                    objExcel.Run "'" & excelMacroPath & "'!" & excelMacroModuleName & "." & excelMacroMacroName
                End If
            Next i
        End If
    End With
    Set objExcel = Nothing
    
End Sub

変数

変数名変更箇所
excelMacroPath実行したいマクロが記載されているエクセルファイルの絶対パス
excelMacroModuleNameマクロのモジュール名
excelMacroMacroNameサブルーチンの名前
tempPath添付ファイルを開くため、一時的に保存する場所(テンポラリフォルダのパス)
変更内容はコメントをご参考ください

挙動

STEP
実行するマクロが記載されているExcelファイルを開く
STEP
添付ファイルを保存するディレクトリパスを取得

set temp folder pathの箇所

添付ファイルは保存する必要がないため、テンポラリフォルダで開く。

保存する必要がある場合は、temppathの箇所を変更してください。

何やってるかの詳細は以下の記事をご参考ください。

あわせて読みたい
Office TANAKA - FileSystemObject[テンポラリフォルダに作業用ブックを保存する]
STEP
開いた添付ファイルからマクロを実行

run Excel Macroの箇所

「添付ファイルが存在」かつ「ファイル名にxlsを含む」条件式にて、Excelマクロを実行。

まとめ

仕訳ルールをマクロのトリガーとすることで、日常業務の自動化の幅が広がります

RPAと異なりOutlook内で完結するため、導入の敷居も低いためオススメです。

シェアしてくださいな
目次
閉じる