ExcelのPaste失敗1004対策
DoEvents万能説です。
ExcelのVBAきっかけですが、WinActor標準ライブラリ(Excel関連 > コピー&ペースト)等にも共通する内容です。
WinDirectorへの移行にそぐわないシナリオや、ほかのRPAの実行ログを吐き出すためにVBAをいじってて、クリップボードを経由したい場面で出くわした症状にうまく対処できたので、お裾分けです。
同じようにうまくいった、当てはまらなかった、うまくいかなかった等、関連情報をお寄せいただけると嬉しいです。
症状
- 実行時エラー
1004
WorksheetクラスのPasteSpecialメソッドが失敗
発生個所
- ActiveSheet.PasteSpecial~の行
頻度
- 当初は1/3程度
- 試行錯誤を経て、1/10程度にはなった
知ってたこと
- 貼り付け先の体勢が整ってないと発生する
- クリップボードの対処は、掴むデータの大きさとかによってタイミングが左右される
- 裏でクリップボードの争奪戦が繰り広げられてると破綻する
試したこと
- Sheet1をSelectしてもActiveにしても、、
- A1をSelectしてもActiveにしても、、
- 10秒Sleepさせても、、
- エラーを無視させて、2つめのActiveSheet.PasteSpecial~を置いても、、
過去ログ
- 定番な感があるトピックで、原因も対策もまちまちな印象
https://winactor.com/questions/question/エクセル%E3%80%80指定範囲へペースト/
https://winactor.com/questions/question/excel%E3%80%80ペースト時エラー(1004)について/
https://winactor.com/questions/question/excel同士のコピーアンドペースト(コピペ)/
https://winactor.com/questions/question/excelからexcelへのセルコピーでエラー番号1004が発生/
Googleせんせーにお伺い
- やはり原因も対策もまちまち
- わたしの場合は1/10の「低頻度」に抑え込んだつもりだったものの、このスレッド↓がビンゴ
クリップボードからのpasteによる貼り付けが「高頻度に」失敗する
https://social.msdn.microsoft.com/Forums/ja-JP/e590e461-0c18-4891-89e2-70281f8b0029/12463125221248312503125081254012489123631242512398paste1239512424?forum=vbajp
- 名が体を表すタイトルのお手本でもある
- モデレーターさんとかが最適なタイトルに修正するしくみがあるみたい
採用した対策
' 保険のワンテンポ
DoEvents ' ← ここにこの1行を追加
ActiveSheet.PasteSpecial~の行
対策後の戦績
- 今のところ百発百中で成功
- 「わたし、失敗しないので」な感じ
見立て
- DoEventsサイコー
- Excel関連 > コピー&ペーストとか関連のプチライブラリとかにもDoEventsをまぶしたら、多くの人がエラーに遭遇せずに、ハッピーでいられそう
- このワンテンポは、きっと誰も気づけないくらいの一瞬で、害はなさそう
- 次期マイナーバージョンアップとかで反映されれば嬉しい
- 変更の要否や影響までは充分に検討できていないものの、Excel操作 > コピー&ペースト系のスクリプトに「Do」が含まれていないことは確認済み
教訓
- VBAの課題は、適宜マイクロソフトのフォーラムも併用しよう
Msdn フォーラム - Visual Basic for Application(VBA)
https://social.msdn.microsoft.com/Forums/ja-JP/home?forum=vbajp
- マルチポストするなら、マナーを意識しよう
- × 一方の質問で解決したから他方は放置とか
- ◎ リアル社会と同じかそれ以上の礼節、リスペクト、心の余裕を持ちたい