こんにちは!UiPath メンターです。
「ファイルが見つかりません」
「セレクターが見つかりません」
これまで、こういったエラーが出るとロボットはその場で赤字のメッセージを出して「停止」していました。
しかし、100件のデータを処理中に、たまたま1件だけデータがおかしくて止まってしまったら?
残りの99件も未処理になってしまいます。これは困りますよね。
今回は、想定外のトラブルが起きてもロボットを止めずに、「エラーをキャッチして対処する」仕組み、トライ キャッチ (Try Catch) をマスターしましょう。
1. 魔法の防護ネット:「トライ キャッチ」
サーカスで空中ブランコをする時、下にネットがあれば落ちても大丈夫ですよね。
「トライ キャッチ」は、まさにその「防護ネット」です。
手順
- [アクティビティ] パネルで「トライ」と検索します。
- [トライ キャッチ (Try Catch)] をドラッグ&ドロップします。
このアクティビティは、3つの部屋(セクション)に分かれています。
- Try (試行): 普段やる仕事(エラーが起きるかもしれない危険な処理)
- Catch (キャッチ): エラーが起きた時にやること(救済措置)
- Finally (必ず実行): 成功しても失敗しても、最後に必ずやること(後片付け)
2. Try:いつもの処理を入れる
まず、[Try] の枠の中に、自動化したい処理を入れます。
例えば、「Excelを開いてデータを書き込む」という一連の流れをここに入れます。
この中でエラーが発生すると、ロボットは即座に処理を中断し、[Catch] の部屋へワープします。
つまり、エラー画面を出して止まることはありません。
3. Catch:エラーの種類を選ぶ
次に、[Catch] の設定です。
「どんなエラーなら救うか」を指定する必要があります。
- [Catch] セクションにある [新しいキャッチを追加 (Add new catch)] をクリックします。
- リストが出てきますが、最初は一番汎用的な
System.Exceptionを選びましょう。
💡 メンターからのアドバイス:System.Exceptionとは?
「ファイルがない」「計算ミス」「アプリのフリーズ」など、技術的なエラーのほぼ全てをカバーする親玉です。
迷ったらとりあえずこれを選んでおけば、どんなエラーでもキャッチしてくれます。
エラー時の対処を書く
System.Exception を選ぶと、その中にアクティビティを置けるようになります。
ここに「エラーが起きた時の動き」を作ります。
- [メッセージをログ (Log Message)]: 「エラーが発生しました」と記録を残す。
- [スクリーンショットを撮る (Take Screenshot)]: エラー画面を画像で保存する。
- [メールを送信]: 管理者にアラートメールを送る。
また、ここで exception.Message という変数を使うと、「なぜエラーになったか(エラーメッセージ)」の中身を取り出せます。
4. Finally:最後のお片付け
[Finally] は、エラーが起きても起きなくても必ず通るルートです。
ここには「後片付け」を入れます。
- [Excel プロセス スコープ] の終了処理
- [アプリケーションを閉じる]
ここをしっかり作っておけば、「エラーで止まったせいでExcelが開きっぱなし(ゾンビ化)」という事故を防げます。
5. 実践パターン:ループの中に入れる
実務で一番使うのがこのパターンです。
「繰り返し (For Each)」の中に「トライ キャッチ」を入れるのです。
動きのイメージ
- 1件目のデータ処理開始(Try) → 成功 → 次へ
- 2件目のデータ処理開始(Try) → エラー発生! → Catchへワープ → 「エラーログ」を出力 → 次へ
- 3件目のデータ処理開始(Try)……
こうすることで、「エラーが出たデータだけスキップして、最後まで完走する」という最強のロボットになります。
今回のまとめ
- [トライ キャッチ] はロボットの防護ネット。
- Try にやりたいこと、Catch にエラー時の対応、Finally に後片付けを書く。
- ループの中に配置すれば、1件エラーになっても止まらずに次へ進める。
⚠️ つまづきポイント:Catchの設定を忘れる
Catchセクションで System.Exception を選んだだけで満足して、中身(ログ出力など)を空っぽにしてしまうと、「エラーが起きたのに無視して進む(エラーに気づけない)」という恐ろしい状態になります(握りつぶしと言います)。
必ず「ログ出力」などの報告処理を入れてください。
次回は、ロボットが大きくなってきた時の整理術。
「ワークフローの分割(Invoke Workflow)」です。
1つのファイルに全てを書くのではなく、部品ごとにファイルを分けることで、メンテナンスが劇的に楽になります。