knowledge Excelのリボンメニューの操作時、ボタン順押し(Alt→H→V→Vなど)は失敗しやすく、別の手順を採用した方が動作が安定する

本記事では、Excelをアプリとして操作する場合におけるポイントを記載します。

Excelの上部のリボンメニューは、マウスからの操作だけではなく、キーボードからも操作できます。
例:「値」貼り付けの場合は「Alt」→「H」→「V」→「V」のようにキーを順押しする
(以下のように画面を出すイメージです)

しかしながら、AutoMateの「入力 - キーストロークの送信」アクションで同様のキー順押し操作を実行すると、タイミングのずれや処理の割り込みにより失敗しやすく、「Alt」以下のキー操作が全て現在選択中のセルにアルファベット入力される、ということが発生しやすいです。

そのため、リボンの操作をするには、キーの順押しではなく、以下のいずれかの方法で実装した方が処理の失敗が少なくて済みます。
■1. 同時押しタイプのショートカットキーを利用する
例えば、形式を選択して貼り付けを実施する場合は、「Ctrl + Alt + V」で対応可能です。
押下後に一度ダイアログに応答する一手間は増えるものの、安定性は増します。
(ショートカットキー押下後に以下のダイアログが出現します。このダイアログには対話機能アクションで応答可能です)

■2. 目的の操作を「クイック アクセス ツールバー」に登録し、そのボタンを対話機能アクションで操作する
Excelのリボンメニューの操作は、右クリックすると「クイック アクセス ツールバーに追加」が可能です。
追加することで、リボンを切り替えずとも画面上部に常に当該ボタンが表示されるため、キーの順押しと比較すると安定した操作が期待できます。
(なお、追加ダイアログが出る点などは■1と同様であるためご留意ください。)

以下、サンプルタスクです。サンプルで利用するExcelファイルはこちらよりダウンロードしてください。

<!--新しいシートを作成・名前変更の上、データの値のみをコピーして貼り付けるサンプル
キーの順押しによるリボンの操作は使用しない-->
<!--変数宣言-->
<AMVARIABLE NAME="var_IsError" VALUE="0" TYPE="number" />
<!--このタスクでは他にExcelが開いていないことを前提とするため、事前チェックを実行-->
<!--実際には、ウィンドウタイトルの指定方法を変えることで、複数のExcelが起動していても対象Excelを間違えることなく実行可能-->
<AMIF ACTIVITY="window_exists" WINDOWCLASS="XLMAIN" />
<AMSHOWDIALOG COUNTDOWNDELAY="5">Excelアプリケーションが他にも起動しています。
この処理を実行する前にすべてのExcelを閉じてください。
処理を中断します。</AMSHOWDIALOG>
<AMTASK ACTIVITY="stop" STATUSTYPE="ERROR" ERRORNUMBER="9999" ERRORTEXT="処理実行時に既にほかのExcelが実行されていた" />
<AMIF ACTIVITY="end" />
<!--対象のブックを開く。Excelがデスクトップにあることを想定。-->
<AMEXCEL SESSION="ExcelSession1" WORKBOOK="%GetDesktopDirectory()%\00009390.xlsx" />
<!--ウィンドウをアクティブにする-->
<AMWINDOW WINDOWCLASS="XLMAIN" />
<AMWINDOW WINDOWCLASS="XLMAIN" />
<AMREGION NAME="シートの追加~リネームまで" COLLAPSE="no" />
<!--シートの追加-->
<AMINPUT KEYSTROKES="{ALT}{SHIFT}{F1}" />
<!--シートの名前変更 クイック アクセス ツールバーに登録されていることが前提-->
<AMINTERACT ACTIVITY="press" AM_SETVAR="var_IsError;1" AM_ONERROR="CONTINUE" WINDOWCLASS="XLMAIN" ACCESSIBILITYENGINE="active" OBJECTPROPERTIES="Toolkit=WindowsAccessibility,Type=PushButton,Class=NetUIHWND,Name=シート名の変更,Value=,X=,Y=" />
<!--エラーになった場合、エラー内容によって処理分岐-->
<AMIF ACTIVITY="last_step" LASTSTEP="failedwithcode" RESULTCODE="20169" />
<AMSHOWDIALOG COUNTDOWNDELAY="5">クイック アクセス ツールバーに「シート名の変更」を登録の上再実行して下さい。
処理を中断します。</AMSHOWDIALOG>
<AMTASK ACTIVITY="stop" STATUSTYPE="ERROR" ERRORNUMBER="9998" ERRORTEXT="クイック アクセス ツールバーに必要な項目が登録されていなかった" />
<AMIF ACTIVITY="end" />
<AMIF EXPRESSION="%var_IsError% = 1" />
<AMSHOWDIALOG COUNTDOWNDELAY="5">ステップ19(対話機能アクション)のエラーメッセージを確認の上、再実行して下さい。
処理を中断します。</AMSHOWDIALOG>
<AMTASK ACTIVITY="stop" />
<AMIF ACTIVITY="end" />
<!--シート名はコピペで貼り付け-->
<AMCLIPBOARD ACTIVITY="set" VALUE="報告用シート(式なし)" />
<AMWAIT SCALAR="300" MEASURE="milliseconds" />
<AMCLIPBOARD ACTIVITY="paste" />
<!--シート名確定-->
<AMINPUT KEYSTROKES="{ENTER}" />
<AMENDREGION />
<AMREGION NAME="データコピー~貼り付け" COLLAPSE="no" />
<!--データコピー-->
<AMEXCEL ACTIVITY="activate_worksheet" SESSION="ExcelSession1" WORKSHEET="Data" />
<AMEXCEL ACTIVITY="activate_cell" SESSION="ExcelSession1" CELLREF="A1" />
<AMINPUT KEYSTROKES="{CTRL}a" />
<AMINPUT KEYSTROKES="{CTRL}c" />
<AMWAIT SCALAR="1" />
<!--新しいシートに貼り付け-->
<AMEXCEL ACTIVITY="activate_worksheet" SESSION="ExcelSession1" WORKSHEET="報告用シート(式なし)" />
<AMEXCEL ACTIVITY="activate_cell" SESSION="ExcelSession1" CELLREF="A1" />
<AMWAIT SCALAR="1" />
<!--同時押しショートカットキー-->
<AMINPUT KEYSTROKES="{CTRL}{ALT}v" />
<!--式を消し、値のみにする-->
<AMWAIT ACTIVITY="window" WINDOWTITLE="形式を選択して貼り付け" />
<AMINTERACT ACTIVITY="press" WINDOWTITLE="形式を選択して貼り付け" ACCESSIBILITYENGINE="active" OBJECTPROPERTIES="Toolkit=WindowsAccessibility,Type=RadioButton,Class=bosa_sdm_XL9,Name=値(V),Value=,X=,Y=" />
<AMINTERACT ACTIVITY="press" WINDOWTITLE="形式を選択して貼り付け" ACCESSIBILITYENGINE="active" OBJECTPROPERTIES="Toolkit=WindowsAccessibility,Type=PushButton,Class=bosa_sdm_XL9,Name=OK,Value=,X=,Y=" />
<!--選択解除-->
<AMINPUT KEYSTROKES="{ESC}" />
<AMENDREGION />
<!--保存して閉じる-->
<AMEXCEL ACTIVITY="close_workbook" SESSION="ExcelSession1" />