Power Automate Desktopがなんとなく使える講座 #5 デバッグとエラー処理

# 変数ペイン
　画面の右側に変数ペインがあり、実行途中の変数の値を確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/5db28181-921a-f049-f584-34394143d823.png)
　薄青色の変数名をクリックすると、その変数に設定された値を見ることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/bb583037-dd32-2c2d-2379-66748c6eb247.png)
　変数名、変数の型、値が表示されます。特に変数の型については注意してみてください。この例では、FirstFreeColumnという変数に数値型で15の値が設定されています。

# エラーペイン
　フローに問題がある場合、問題が発生したステップの左側に **!** マークが表示され、下側にエラーペインが表示されます。エラー内容は、大抵の場合、読んでもわかりにくいものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/07069cdc-166b-0dcd-1600-3239c491caf9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8128929f-b6f3-dceb-30bc-09a159e1125b.png)
　変数ペインを使って、エラーが発生する直前の状態の変数の値が正しくセットされているか、確認しましょう。

# 次のアクションを実行
　表示では「次のアクションを...」となって、吹き出しでは「アクションごとに実行」となっておりますが、1ステップだけ進めるボタンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/08526de6-0e00-ce30-be7f-b9f7a27df2cd.png)
　最初に押すと、1番目のステップの実行待ち（要はなにもしないのだが）となり、もう一度押すと1番目のステップが実行され、2番目のステップの実行待ちとなります。１つ１つステップを確認するのに役立ちます。
　通常、次に示す「ブレークポイント」と組み合わせ、怪しいところを1ステップずつ確認するのに使います。実行を止めるには、停止ボタンを押します。

# ブレークポイント
　中央のワークスペースに表示されたフローの左側にステップ数が表示されていますが、その左あたりをマウスでクリックすると赤丸が付きます。これが**ブレークポイント**と呼ばれるもので、この直前で実行がいったん止まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/d6e9f510-eb67-1943-7ef5-b5af9fcb43c4.png)
　怪しい部分で止めて、変数の値を確認したり、1ステップずつ動かしてみたりします。また、条件分岐できちんと処理が流れているか確認するのに使います。

# ここから実行
　特定の部分から実行したい場合は、実行した部分で右クリックし、「ここから実行」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/011b06a8-d9c9-a707-3b5b-eaab3119177d.png)
　ただし、実行に必要な変数がそれより前のステップで設定されていた場合は、変数が未設定のためエラーとなってしまいます。アクションの動作を確認するために、テスト的に動かすのに使ったりします。

# 実行速度・ウインドウの表示方法
　フローを編集画面から実行する場合、標準で**実行遅延が100ミリ秒**入っており、動作を目で追うことができるようになっています。デバッグには便利ですが、もう少し速度を上げたい場合や、遅くしたい場合、ウインドウ下の実行遅延をクリックして変更することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/09076363-9c17-f1b1-f646-fdff7014fce8.png)
　**フローの一覧画面から実行** させた時には、遅延なしで実行されますので、完成した後は一覧画面から実行させるのが良いでしょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/397e6e34-df8f-b582-925b-30a6decbc334.png)

　Excelのように、画面の書き換えが多い作業は、**ウインドウを非表示**にしてやると処理が速くなります。データ数が5,000件くらいになってくると、表示のままで4分40秒かかるのが、非表示にすると4分で完了しました。ウインドウインスタンスの項目は、他のアクションのようにマウスで選択入力することができないので、変数 **%ExcelInstance%** を手入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/7540ace0-76f6-e6f6-c975-85a6e418a39d.png)
　処理終了後は、**ウインドウを表示に戻してやらないと、操作できなくなります**。エラーが発生したり、途中で停止させても、エクセル表が内部で開かれたまま操作できなくなりますので、タスクマネージャーでエクセルのタスクを止める作業が必要になります。一番時間のかかるループの始まる前に非表示にし、ループが終了したら表示に戻してやるのがいいと思います。
　また、途中でエラーになる可能性がある場合は、エラー処理をきちんと行う必要があります。下の例では、エラーが発生したらループを抜け、**ShowExcelbookのラベルに移動**してExcelを表示に設定して終了するようにしてあります。エラー処理を記述したステップには、左側に盾のような印が表示されます。（※ラベルは、日本語は使えませんので英数字を使います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1fcfce26-8765-96a4-6b79-d527b06c4138.png)

# エラー処理
　アクションでエラーが発生した場合、通常はエラーペインにエラー内容を表示させてフローは停止します。
　ただし、エラー発生時の処理を選択して処理を継続させることも可能です。
　アクションの左下に**「エラー発生時」**という表示をクリックすると、いくつか処理を選択することができます。
　aを設定すると、再実行が1回だけ行われます。aを設定してないか、再実行してもエラーとなった場合は、bの全てのエラーに対してエラー処理を行うか、cのエラーの種類に応じてエラー処理行うか、いずれかを行うことができます。
　通常は、エラーが発生したら初期値の**スローエラー**で処理を中断するようになっていれば良いと思います。発生するエラーが事前に想定でき、対応方法が記述できる場合は、以下の選択でエラー対応を行います。

## 1. エラーが発生した場合にアクションを再試行する
　エラーが発生した場合に、設定した間隔を空けて再度でアクションを実行します。間隔は初期値は2秒ですが、2の数字をクリックすると変更することができます。アプリの起動がうまくいかない場合にこれを使うと、問題なく起動できたりします。Outlookの起動でよく使ってます。
　再試行は1回だけ行い、それでもエラーとなったら、2か3で指定されたエラー処理に移ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/77c323bc-4ab3-ecf4-e60c-3fb2563d49f6.png)

## 2. すべてのエラーに対する処理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/8fba5068-c00a-25ea-531c-72705e7e4139.png)
### a) スローエラー
　エラーペインにエラー内容を表示して、処理を停止します。なにも設定しない場合は、これになってます。
### b) フロー実行を続行する：次のアクションに移動
　エラーを無視して次の処理に移ります。例えば、ファイルの削除で、削除ファイルが存在しない場合エラーとなりますが、削除の必要がないので処理を続けるという場合に使います。
### c) フロー実行を続行する：アクションの繰り返し
　成功するまで処理をずっと繰り返します。繰り返して成功するような処理でない場合、**永久ループ**になって処理が終わらなくなりますので注意してください。
### d) フロー実行を続行する：ラベルに移動
　エラー処理の書かれたフローに移動するなど、制御を変更します。前に説明した、ループ中にエラーが発生した場合、ループを注視してウインドウを表示させて終了する処理は、これを使用しています。移動先にはラベルを設定しますが、ラベル名に日本語を入れると、以下のようなエラーが表示されて登録できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/1a11969d-47ed-834f-204f-0b91c2f9cfd0.png)

## 3.エラーの種類に応じた処理
　「詳細」をクリックすると、その処理で発生するエラーが出てきます。処理の種類によって、発生するエラーの種類は変わります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/066172e2-9829-4cb7-0f38-e19e618edb02.png)
　それぞれのエラーの種類ごとに、2で示したaからdの処理を選択できます。

## 4.新しいルール
　2.すべてのエラー、3.エラーの種類に応じた処理で、エラー処理を行う前に、**新しいルール**で設定した以下の処理を行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/131423dc-aba7-06c2-402e-f4e5ed5d9e60.png)
### a) 変数の設定
　後続の処理でエラーが発生したことを知らせるため、変数に値をセットして処理を続けます。通常、これを設定したらスローエラーではなく、フロー実行を続行するの処理を選択します。後続のエラー処理の中で、変数に設定された値を参照して、どこでどんなエラーが発生したか調査したり、エラー内容に応じたリカバリー処理を行います。
### b) サブフローの実行
　エラー処理を記述したサブフローに処理を移します。サブフローは、「サブフロー」と書かれたタブで表示された **+** を押して、新しいフローを記述します。サブフローを実行した後は、上記2か3のエラー処理に戻ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/3a28fb2a-d188-2d05-5ab1-50d369e1c93e.png)

　使い捨てのフローでは特に使う必要はありませんが、完成度を上げるためには必要となりますので、色々試してみてください。

# 終了しないタスクが動作を不安定にさせる
　エクセルなど、RPAで実行させたタスクが終了した後も残ってしまうことがあります。これは、Power Automate Desktopに限らず、他のソフトでもインスタンスを終了させずに中断した場合に見られますが、これが原因で実行したフローがエラーになってしてしまうことがあります。この講座では、最後の出来上がりを見るために、エクセルをh開いたままでフローが終わっています。何度も実行をせている場合には、時々タスクマネージャーでエクセルのタスクを確認し、残っている場合は終了させてみてください。
　**本番運用するフローでは、インスタンスをきちんと終わらすために「Excelを閉じる」を使って終わらせるようにしてください。エクセルに限らず、ChromeやEdge、Outlookなども、「Webブラウザーを閉じる」や「Outlookを閉じます」で終わらせてください。常時立ち上げたままのPCでPower Automate Desktopを動かしている場合は特に、ゴミタスクが発生していないか注意してください。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864075/edb06f12-97b6-787b-e6a3-97e79b044966.png)