コラム コラム:初心者がハマりがちなこと

本コラムでは、初心者がAutoMateの構築・操作時にハマりがちな点、およびその解決方法について紹介します。
(なお、本記事は必ずしも全員に当てはまることではありません。そういうこともあるのだと、心のどこかに置いていただくだけでも結構です。)

■前提:AutoMateにおける禁則事項は守っているものとする
【参考】AutoMate : やってはいけないこと
https://automate.sct.co.jp/knowledge/12109/

■1. ループの内部で変数を宣言する
AutoMateでは、必要な変数の個数が最初から分かっていることは少なく、処理を構築する過程において新たに必要になってくるケースが多々存在します。
その際、変数を新たに追加するわけですが、この変数宣言ステップをループの中に作ってしまうことが少なくありません。
同じ名前の変数は1度しか宣言できないので、ループした2回目以降で同じステップを通ると当然のごとくエラーになります。
変数/配列の宣言は、必ずループの外側で行わなくてはなりません。
また、変数/配列の宣言は、可能な限りタスクの最初の方のステップで行うことが望ましいです。

■2. セッションを「閉じる」アクションで終了していない
Excelセッションやブラウザセッションは、「開く」アクションで作った後は「閉じる」アクションで閉じられるまでそのセッション名を保持し続けます。
つまり、「閉じる」アクションでそのセッションを終了しない限りは同じセッション名を使うことは出来なくなります。
こちらも1と同様に、ループの内部でセッションを開いている場合、同ループ内で該当のセッションを閉じる処理を行っていない限りは次のループで例外なくエラーになります。

■3. 「半角文字」と「全角文字」は全く別の文字
例えば、以下のようなサンプルを考えます。テキストが一致すれば「一致」のダイアログを出すサンプルです。

<AMVARIABLE NAME="var1" VALUE="ABC" />
<AMIF EXPRESSION="%var1% = &quot;ABC&quot;" />
<AMSHOWDIALOG MESSAGE="一致" />
<AMIF ACTIVITY="end" />

こちらの実行結果としては、一致することなく終了します。理由としては、変数「var1」に設定されているABCは全角文字、IF文に設定されているABCは半角文字なので一致しない、というものです。
声に出して読めば同じ文字ですが、AutoMate、ないしはコンピューターから見ると全く別物です。
同様に、変数・関数部分を囲う「%」文字が全角になっている場合も実行結果NGとなります。
[図1:半角・全角比較例(メモ帳)]

図1をご覧いただければ一目瞭然かと思いますが、文字を比較すると、全く違うことが分かります。
半角文字と全角文字は明確に区別されているので、混同してはなりません。

■4. ブランク1文字でも混ざっていると別の文字列になる
「ExcelやWeb画面から取得した文字列が、一致しているはずなのにIF条件にヒットしない」という場合、実は余分な文字列が含まれている場合が多いです。
例えば、以下のような状況を想定します。
(タスク)

<AMVARIABLE NAME="var1" VALUE="" TYPE="text" />
<AMEXCEL ACTIVITY="get_cell" WORKBOOK="%GetDesktopDirectory()%\注文書.xlsx" SAVETYPE="do_not_save" RESULTVARIABLE="var1" CELLREF="E12" />
<AMIF EXPRESSION="%var1% = &quot;001&quot;" />
<AMSHOWDIALOG MESSAGE="一致" />
<AMIF ACTIVITY="end" />

[図2:実行後の画面]

タスク内容としては、ExcelのE12セルから取得した内容が「001」であれば「一致」のダイアログを出すというものです。
図2を見る限りだと、一致しているように見えます。ところが、実はこの実行結果は一致せず、IF文の中を通りません。

そのような際は、変数に実際に格納されている値を正確に把握する必要があります。
そのために、タスクビルダーで該当の変数を右クリックし、「値のコピー」を選択します。
[図3:値のコピー]

その後、メモ帳に貼り付けて確認すると、変数に格納されていた値は、末尾に余計なブランクがあることが分かります。
[図4:メモ帳に貼り付けて確認した結果]

このブランクこそが、IFの条件にて条件に一致しなかった原因となります。
逆に、これさえ判明すれば、Trim関数で末尾のブランクを消せばよい等、対処方法が明確となります。

■5. ブラウザ画面の遷移(ローディング)は必ず待機させる
「Webブラウザ - クリック」アクションにおいて画面遷移中に次のアクションに進んでしまうと、エラーになります。
AutoMateも人間と同じで、Webページに現れていないボタンを押したり、テキストボックスに文字を入力することは出来ません。
(なお、Webページのローディングが終了していれば、画面に見えていない(=スクロールすれば見える)オブジェクトでも操作できます)
「Webブラウザ - クリック」にて画面遷移した先の画面を操作するには、必ず「ページのローディングが終了するまで待つ」にチェックを入れます。
また、Webページのローディングの終了とコンテンツの表示がイコールではない場合は、必要に応じて秒数でのWaitを追加してください。

■6. マウス操作・キーボード操作での操作対象ウィンドウはまず第一にフォーカス
マウスクリックやキーボードによる操作は、操作対象のウィンドウがアクティブウィンドウになっていなければ作用しません。
「入力」アクションにてアプリケーションの操作を行う場合は、必ず「ウィンドウ - フォーカス」アクションを使用してアクティブウィンドウにしてから実行します。
なお、1回フォーカスしただけではウィンドウが前に出るだけで入力可能状態にならない(=キーボードを手で打っても無反応)の場合は、もう一度同じウィンドウをフォーカスし直すことで解決できます。

以上、AutoMateを始めたばかりの人がハマりやすいポイントの一例となります。
心の片隅に置いておくと、似たようなことがあった場合に思い出せるかもしれません。