LoginSignup
0
0

More than 1 year has passed since last update.

【Blue Prism】からExcelマクロに引数を送り、実行結果を取得する方法

Last updated at Posted at 2022-09-30

はじめに

Blue PrismにはExcelの操作が行えるVBO「MS Excel」の中でExcelマクロの実行できる「Run Macro」があります。
Excelマクロの既存資産やRPAでExcelの細かい操作まで必要な場合に使用頻度が高いものになりますが、Blue PrismではExcelマクロへ引数を送り実行結果を取得する設定がありません。
そこでExcelのシートに値の書き込みを行い、Blue Prismとの情報の受け渡しをしてみることにしました。

Blue Prismからの各種情報を送る用のExcelシートを用意する

Excelのシートに以下のようなマクロ内で使用したい項目をまとめたシートを用意します。
image.png

Blue Prismの値を書き込む実装

マクロ実行前に各種情報を送る用に作成したExcelシート該当項目に対応するC列に値を書き込む処理を実装しておきます。
image.png

マクロからBlue Prismへ実行結果情報を送るExcelシートを用意する

Excelのシートに以下のようなマクロ内で処理した結果を項目毎にまとめたシートを用意します。
image.png

Blue Prismの値を取得する実装

マクロ実行後に実行結果情報取得用に作成したExcelシート該当項目に対応するC列の値を取得する処理を実装しておきます。
image.png

マクロの実装

マクロに今回は以下のようなコードを実装しておきます。
本マクロは「macro設定」シートの情報を読み取り、処理中フォルダに格納されているファイルを1件ずつ取得して処理を行い、処理が正常完了時は処理後フォルダへ対象ファイルを移動、異常完了時はNGフォルダへ対象ファイルを移動がそれぞれ実施され、最後に各種処理結果の件数情報を「macro処理結果」シートに書き込む操作を行うものです。
マクロ上の「' ~ファイル処理~」部分に実際のファイル処理を実装し、「' ファイル処理中にエラー対象とする場合の処理」部分のコメントアウトを外してエラーハンドリングを行うように編集してもらえれば各ファイル毎に正常完了・異常完了の判定処理を行うことも可能となっていますので是非活用してみてください。

Sub Main()

    Dim fso As New FileSystemObject
    Dim lngProcessCount As Long
    Dim lngOkCount As Long
    Dim lngNgCount As Long

    Dim strGenshiFolder As String
    Dim strShoriMaeFolder As String
    Dim strShoriChuFolder As String
    Dim strShoriGoFolder As String
    Dim strNgFolder As String

    Dim strFileName As String
    Dim varTmp As Variant
    Dim TargetFile As File

    On Error GoTo ErrHandler

    ' 各処理件数初期化
    lngProcessCount = 0
    lngOkCount = 0
    lngNgCount = 0

    ' 各種設定情報取得
    With ThisWorkbook.Worksheets("macro設定")
        ' 00_原紙フォルダパス
        strGenshiFolder = .range("C5").Value
        ' 01_処理前フォルダパス
        strShoriMaeFolder = .range("C6").Value
        ' 02_処理中フォルダパス
        strShoriChuFolder = .range("C7").Value
        ' 03_処理後フォルダパス
        strShoriGoFolder = .range("C8").Value
        ' 10_NGフォルダパス
        strNgFolder = .range("C9").Value
    End With

    ' 各種結果情報初期化
    With ThisWorkbook.Worksheets("macro処理結果")
        ' 処理件数
        .range("C4").Value = ""
        ' 正常完了件数
        .range("C5").Value = ""
        ' 異常完了件数
        .range("C6").Value = ""
        ' 例外エラーメッセージ
        .range("C7").Value = ""
    End With
    
    ' 処理中フォルダに格納されているファイルを順番に処理
    For Each TargetFile In fso.GetFolder(strShoriChuFolder).Files
    
        ' 処理件数加算
        lngProcessCount = lngProcessCount + 1
    
        varTmp = Split(TargetFile, "\")
        strFileName = varTmp(UBound(varTmp))
    
        ' 処理対象ファイルを開く
        Workbooks.Open TargetFile
    
        ' ~ファイル処理~
        
        ' ファイル処理中にエラー対象とする場合の処理
        'GoTo FileErrHandler       
    
        ' ファイルを閉じる
        Workbooks(strFileName).Close SaveChanges:=False
        
        ' 処理したファイルを処理後フォルダへ移動
        Name TargetFile As strShoriGoFolder & "\" & strFileName
        
        ' 正常完了件数加算
        lngOkCount = lngOkCount + 1
        
        ' 次のファイル処理に進む
        GoTo Continue
        
FileErrHandler:
        
        ' 異常完了件数加算
        lngNgCount = lngNgCount + 1
    
        DoEvents
    
        ' ファイルを閉じる
        Workbooks(strFileName).Close SaveChanges:=False
    
        ' エラー発生したファイルをNGフォルダへ移動
        Name TargetFile As strNgFolder & "\" & strFileName
        
Continue:

    Next
    
    ' 各種処理件数入力
    With ThisWorkbook.Worksheets("macro処理結果")
        ' 処理件数
        .range("C4").Value = lngProcessCount
        ' 正常完了件数
        .range("C5").Value = lngOkCount
        ' 異常完了件数
        .range("C6").Value = lngNgCount
    End With
    
    ' 上書保存
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.FullName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True
        
    ' 後始末
    Set fso = Nothing
        
    Exit Sub

ErrHandler:

    ' ~エラー時の処理~
    ' 各種処理件数とエラーメッセージ入力
    With ThisWorkbook.Worksheets("macro処理結果")
        ' 処理件数
        .range("C4").Value = lngProcessCount
        ' 正常完了件数
        .range("C5").Value = lngOkCount
        ' 異常完了件数
        .range("C6").Value = lngNgCount
        ' 例外エラーメッセージ
        .range("C7").Value = Err.Description
    End With
    
    ' 上書保存
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.FullName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
    Application.DisplayAlerts = True
    
    ' 後始末
    Set fso = Nothing
    
End Sub

マクロ実行用の処理を実装

以下のようなマクロ実行用の処理を実装しておきます。
image.png

実行する

これで実行準備は完了しましたので、実行してみましょう。
今回は以下のファイルを処理してみます。
今回は01_処理前フォルダから02_処理中フォルダへのファイル移動処理については割愛して02_処理中フォルダ内にファイルを配置しています。
image.png
結果が分かりやすいようにマクロファイルの情報を削除しておきます。
image.png

結果

これで必要な設定は終わったので、実行してみます。
image.png
実行完了しました。結果を確認してみます。
マクロファイルのmacro設定シートにBlue Prismからの値が書き込まれています。
03_処理後フォルダにもちゃんとファイルが移動されていますね。
マクロファイルのmacro処理結果シートにもマクロ実行結果の値が書き込まれています。
Blue Prismにもマクロ実行結果が受け取れていることがわかります。
image.png
image.png
image.png
image.png

まとめ

今回はExcelシートの値にてBlue Prismとマクロで情報の受け渡しをしてみました。
Blue PrismからExcelのmacro設定シートを経由することでBlue Prismとマクロの両方でフォルダパス等の設定情報を管理する必要がなくなります。マクロ単体実行時でも特に何も設定することなくBlue Prismと同じ環境のまま実行することが可能です。
Excelのmacro処理結果シートを活用することでマクロ実行時のエラー情報や処理結果情報等をBlue Prismから受け取ることができ、メールなどでマクロの処理結果をユーザへ通知することが可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0