UiPathでエクセルのマクロ(選択セルをコピーする)を実行すると、
クリップボードにコピーされずに終了してしまいます。
マクロの記述は下記のようにA1セルをコピーするという単純なものです。
Sub copy()
Worksheets(“Sheet1”).Range(“A1”).copy
End Sub
UiPathの「Excelアプリケーションスコープ」アクティビティ内に「マクロ実行」アクティビティを配置して「copy」マクロを実行させています。
手動でマクロ実行したのち、Ctrl+Vキーをするとセルの内容がコピーされているのですが、UiPathにて実行するとセルの内容がコピーされません。
メッセージボックスを表示させる行(MsgBox “マクロ実行”)を追加してUiPathを実行すると表示されますので、マクロが実行されていないという可能性はない状態です。
UiPathでのクリップボード操作に関して何らかの問題があると推察しているのですが、どこに問題があるか全く見当がつけられず困っております。
情報ご教示いただければ幸いです。宜しくお願い致します。
Yoichi
(Yoichi)
2
こんにちは
UiPath側の実装がどのようになっているか分からないので、あくまで可能性の一つですが、
例えばクリップボードへのコピーが終わらぬうちにEXCELを閉じてしまっているとか、タイミング系の問題はなさそうでしょうか?
copy後にSleep入れる、VBA呼出し後Delayを入れる等で切り分けはできるかと思います。
nemosu
3
Yoichiさん
お返事ありがとうございます。
ご指摘いただきましたExcelファイルが閉じられている可能性についてですが、
Excelアプリケーションスコープ内で全て完結していますので、その可能性は低いかと思います。
※参考画像を添付いたします。
検証行ってみましたが、UiPath上でのマクロ実行は、マクロが終了した時点でExcel上での処理が完了したと認識される(コピーした値等は消える)のでは、と推測しています。
検証行った内容は下記の通りです。
①手動でマクロ実行したのちB1セルを選択しCtrl+V →A1セルの値貼り付け可能
②UiPathにてマクロ実行→B1セル選択→Ctrl+V(ホットキー) →値貼り付け不可
※添付画像の例
③マクロの記述でA1セルコピー後、B1セルに値を張り付ける記述を追加して、
UiPathでマクロを実行 →A1セルの値貼り付け可能
④UiPathにてA1セル選択→Ctrl+C(ホットキー)→B1セル選択→Ctrl+V(ホットキー) →A1セルの値貼り付け可能
マクロで実行させる方法以外にも作りこむ方法はありますので、
一先ず、別の方法にてロボットを作りこもうと思います。
ありがとうございました。
Yoichi
(Yoichi)
4
こんにちは
添付いただいた画像確認しましたが、Send HotKeyアクティビティのctrl+Vの部分のVが小文字になっていますが、これを大文字にしても動作変わりませんでしょうか?(小文字だと動作しませんので)
nemosu
5
ありがとうございます。
ご教示いただきました、
Send HotKeyアクティビティのVを大文字にしてみましたが、動作に変わりはありませんでした。
以上、ご報告でございます。
Yoichi
(Yoichi)
6
こんにちは
何度もすみません。いただいた画像から手元の環境で試してみましたが、現象再現できました。
先ほど申し上げたctrl+v は小文字のままで正解でした。こちらは訂正したします。
解決方法ですが、EXCELのバージョンによっても挙動が異なるかもしれませんが、手元の環境では、貼り付けの前にアクティベートアクティビティでワークシート部分を事前にアクティベートすることによりctrl+vが効きました。一度お試しいただければと思います。
nemosu
7
Yoichiさん
現象の確認にお時間いただきまして、ありがとうございます。
アクティベーションアクティビティを貼り付け前に配置してみましたが、
私の環境では現象改善しませんでした。
※下記環境にて確認を行っております
OS:Windows10Pro 64bit
Office:Office Standard 2016 (32bit)
Yoichi
(Yoichi)
8
こんにちは
改善しませんか。残念です。
こちらの環境はOffice2010 Win7Pro(32bit)です。
クリップボードの内容をトレースしましたが、ctrl+vの直前までは内容が保持できていました。
現象的には、エクセルctrl+vがワークシートに対してうまく行われていないため、結果として貼り付け失敗、クリップボードも空になっているようです。
あとは試行錯誤になりますが、アクティベートする指定の範囲を変更してみる(お試しいただいたのはワークシート部分のみを指定してアクティベートされていますでしょうか?)、SendHotkeyのウインドウメッセージを送信をチェックしてみる、あたりを試すくらいでしょうか...
nemosu
9
はい、アクティベートはワークシート部分を選択しております。
OS、UiPathのパッケージバージョン等々で挙動が変わってくるのかもしれませんね。
念のため、マクロ実行直後に「クリップボードから取得」アクティビティを配置すると「Empty Clipboard」とエラーが表示されましたので、クリップボードに値自体入っていない可能性が高いと思われます。
なお、「マクロを実行」「クリップボードから取得」アクティビティの間に「クリップボードに設定」アクティビティを配置して適当な文字列を指定したところ、「メッセージボックス」アクティビティにて指定した文字列が表示されました。
Yoichi
(Yoichi)
10
ご返信・ご確認ありがとうございます
こちらでの挙動とかなり異なりますね。
やはり環境をあわせないといけませんか...