「VBA を呼び出し」アクティビティで遭遇するエラー

## 皆もすなるQiitaといふものを、儂もしてみむとてするなり。

と言う訳で、こん＊＊は！はなっち！です。

★★★この記事はUiPathブログ発信チャレンジ2021サマー、7月31目の記事です。★★★

###振り返り
前回は、どう使うか、お作法をまとめてみました。
ロボで定義している変数の属性と、.bas側のFunction関数、Sub関数の引数として定義されている変数の属性は合わせておくって事です。

###Case1：合わさないで処理したら...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/8983eb38-93f4-65ca-a11d-44007de726f4.png)
図1 hogehogeInt関数（2つのInteger型を受け取り、合計値を返す）

こんな.basは用意しなくても、代入アクティビティで実装できるぢゃん！とお思いでしょうが、そこは堪えて、お読みください。

さて、このhogehogeInt関数は、Integer型の値をもらう事で機能するものです。
間に、「VBA を呼び出し」アクティビティのObject型を挟むので、こんな定義でも正常終了し、ただしく機能します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/d8f38b68-4b7a-7d2e-4b9c-2421061c7ab2.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/85acc99c-cfd5-a0ae-0638-d6eb7c2beadc.png)
図2 String型（"10"）とInt32型(2)の属性を持つ変数を、Integer型の引数に渡す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/6559eac9-dd35-313f-44dc-59be8ad1ae1f.png)
図3 その実行例

######やるなぁ！「VBA を呼び出し」アクティビティ

###Case2：合わさないで処理したら...
型が合わなくても、Object型がなんとかしてくれる！のも、程度であって。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/d3f0d7a2-fd3e-a3ab-2472-f08e446e8197.png)
図4 String型（"1O"）とInt32型(2)の属性を持つ変数を、Integer型の引数に渡す
⇒ありがちな、ZEROと、オーを書き間違えた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/7ca66632-1e11-ffe7-5b8c-f34ada702f9b.png)
図5 その実行結果（種類が一致しません）

ファイルの検証機能ではエラーが無いものの、Objectの形式変換でエラーが発生したのでしょうね。
こう言った場合、属性は合わしておいた方がいいって事を痛感するわけです。

###Case3：合わせたんだけど、値が変な状態で処理したら...
属性もＯＫ！値もＯＫ！でもでも。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/7675efa9-dc73-6d1e-dea0-ca02e9894ea6.png)
図6 String型（"10"）とInt32型(0)の属性を持つ変数を、Integer型の引数に渡す
除算例外を起こしてみました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/9d7d3ae1-29c0-0612-da73-348a84e19f20.png)
図7 その実行結果その１（VBA側でのエラー）
こののち[終了(E)]をクリックして、VBAを終了させると。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/823d6935-ff4d-9bbe-fa9c-fd69a62060bf.png)
図8 その実行結果その２（VBA側でのエラーがあったので、Excelとしてエラーを返した）

属性は合わしていても、エラーは発生してしまいますね。無論、どうなるかを検証するためのFunction関数ですよ。

★ちなみに、図7 その実行結果その１（VBA側でのエラー）で[終了(E)]をクリックせずに、[デバッグ(D)]をクリックしますと。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/4c92704c-8caf-7bbe-4c3f-21d26f99f3b2.png)
図9 Visual Basic Editorでのデバッグ
が表示され、通常の改修ができます。ただしこのVBE上で修正しても、ロボ側で設定してある.basには反映されないので、どう修正したのかを覚えておき、慌ててロボ側で設定してある.basも修正しましょう。

###Case4：ちょっと改修してたら...
今まで動いてたのに、英単語を日本語化してみたら。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/50749d01-d068-3ced-6215-9d881cab7b26.png)
図10 マクロが無効！

可読性を高めようと各変数を日本語にしたんだけど。。。無論引数の数、属性、処理は変更していないのに。。。

実は、.basファイルは"SJIS"コードで記述しなければなりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/31acef3c-4377-8b7b-5520-e792e51209be.png)
図11 右上に、UTF-8との記載が見える（サクラエディタの場合）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669015/fe1ee35a-315c-b512-0bca-22f2694c33b0.png)
図12 改めて”SJIS”で保存する
⇒右上に、SJISとの記載が見える（サクラエディタの場合）


##おわりに
いかがでした？

「VBA を呼び出し」アクティビティは、
１）Excel Application Scopeに指定されたワークブックに対して、
２）SJISで記述された.basファイルをIMPORTし、
３）RunMacroさせる
ものなんですね。

そういう挙動を頭に入れつつ、正しく引数を指定し、正しく戻り値を処理し、業務効率化を進めてまいりましょう！

是非UiPathでのロボ開発の一助になればと思っています。

ありがとうございました！