MENU

仕訳ルールを用い 添付のExcelファイルにてマクロを実行する方法【OutlookVBA】

以下の方向けの記事になります
  • Outlookにて添付ファイルの処理をマクロを用いて行いたい
  • Outlookにて仕訳ルール実行時にマクロを実行したい
目次

Outlook マクロについて

コード

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

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, strFile As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    With FSO
        tempPath = .GetSpecialFolder(2) & "\" & .GetBaseName(.GetTempName) & ".xlsx"
    End With
    
    'regist product analysis data
    Dim openWorkbook As Workbook
    With getMailItem
        If .Attachments.Count <> 0 Then
            For i = 1 To .Attachments.Count
                If .Attachments.Item(i).FileName 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

挙動

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

set temp folder pathの箇所

ファイルは保存する必要がないため、テンポラリフォルダパスを取得している。

保存する必要がある場合は、temppathの箇所を変更すれば良い。

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

regist product analysis dataの箇所

文字列意味
getMailItem.Attachments.Count添付ファイルの数
objExcel.Run (‘”絶対パス”‘!”マクロモジュール名”.”サブルーチン名”)Excelマクロの実行
文字列の意味

IF分岐条件は、「添付ファイルが存在し」かつ「ファイル名にxlsを含む」場合

設定

VBAコード修正点

変数名変更箇所
excelMacroPath実行したいマクロが記載されているエクセルファイルの絶対パス
excelMacroModuleNameマクロのモジュール名
excelMacroMacroNameサブルーチンの名前
マクロコード変更箇所
コメントを参照に記入して下さい

レジストリエディターでの設定

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

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

レジストリエディターは、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
Let's share this post!

コメントする

To comment

目次
閉じる