5

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/?q=Paste+失敗|1004

  • 定番な感があるトピックで、原因も対策もまちまちな印象

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せんせーにお伺い

https://www.google.com/search?q=VBA+Paste+失敗

  • やはり原因も対策もまちまち
  • わたしの場合は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

  • マルチポストするなら、マナーを意識しよう

https://www.google.com/search?q=マルチポスト+マナー

  • × 一方の質問で解決したから他方は放置とか
  • ◎ リアル社会と同じかそれ以上の礼節、リスペクト、心の余裕を持ちたい
anothersolution 質問の投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。