はじめに
Blue PrismにはExcelの操作が行えるVBO「MS Excel」の中でExcelマクロの実行できる「Run Macro」があります。
Excelマクロの既存資産やRPAでExcelの細かい操作まで必要な場合に使用頻度が高いものになりますが、Blue PrismではExcelマクロへ引数を送り実行結果を取得する設定がありません。
そこでExcelのシートに値の書き込みを行い、Blue Prismとの情報の受け渡しをしてみることにしました。
Blue Prismからの各種情報を送る用のExcelシートを用意する
Excelのシートに以下のようなマクロ内で使用したい項目をまとめたシートを用意します。
Blue Prismの値を書き込む実装
マクロ実行前に各種情報を送る用に作成したExcelシート該当項目に対応するC列に値を書き込む処理を実装しておきます。
マクロからBlue Prismへ実行結果情報を送るExcelシートを用意する
Excelのシートに以下のようなマクロ内で処理した結果を項目毎にまとめたシートを用意します。
Blue Prismの値を取得する実装
マクロ実行後に実行結果情報取得用に作成したExcelシート該当項目に対応するC列の値を取得する処理を実装しておきます。
マクロの実装
マクロに今回は以下のようなコードを実装しておきます。
本マクロは「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
マクロ実行用の処理を実装
実行する
これで実行準備は完了しましたので、実行してみましょう。
今回は以下のファイルを処理してみます。
今回は01_処理前フォルダから02_処理中フォルダへのファイル移動処理については割愛して02_処理中フォルダ内にファイルを配置しています。
結果が分かりやすいようにマクロファイルの情報を削除しておきます。
結果
これで必要な設定は終わったので、実行してみます。
実行完了しました。結果を確認してみます。
マクロファイルのmacro設定シートにBlue Prismからの値が書き込まれています。
03_処理後フォルダにもちゃんとファイルが移動されていますね。
マクロファイルのmacro処理結果シートにもマクロ実行結果の値が書き込まれています。
Blue Prismにもマクロ実行結果が受け取れていることがわかります。
まとめ
今回はExcelシートの値にてBlue Prismとマクロで情報の受け渡しをしてみました。
Blue PrismからExcelのmacro設定シートを経由することでBlue Prismとマクロの両方でフォルダパス等の設定情報を管理する必要がなくなります。マクロ単体実行時でも特に何も設定することなくBlue Prismと同じ環境のまま実行することが可能です。
Excelのmacro処理結果シートを活用することでマクロ実行時のエラー情報や処理結果情報等をBlue Prismから受け取ることができ、メールなどでマクロの処理結果をユーザへ通知することが可能となります。