Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Excel 2013)
デバックでは問題ないのにRunするとエラーになる
投稿日時: 19/05/31 13:50:19
投稿者: あきこさん

https://www.moug.net/faq/viewtopic.php?t=78285&sid=d75e5dba58aafbf9fdfe852f1e4e2fe7
 
前回、同じ質問させていただいたのですが
どうやら、エラーの出かたにムラがあるとわかり、結局解決しないままでいます。
Win7 Excel2013機器ではエラーが出ず、デステップインでもエラーが出ず、
で理由がわかりません。
 
 
<vba概要>
3種類のグラフがファイル内にあり。
それぞれ、20回ほどグラフコピー→画像として別シートに貼付け を行う(計60シート分)
 
<エラー内容>
グラフのコピーがうまくできないことがあるようです。
ActiveSheet.Pictures.Paste.Select 部分で
「picturesクラスのPasteプロパティを取得できません」
もしくは
「データを貼り付けできません」
が出ます。
これが、60回のうち2回のみ。
いつも同じシートで発生するのですが、なぜこの2シートなのかはわからずです。
 
さいしょからデバッグで進めると正しい画像が貼りつきますが。
エラー後のステップインでは、この2シートにはへんちくりんな謎の画像が貼りつきます。
 
 
 
LOOPのし過ぎでCPUに負担がかかってる?と考えて
途中に
Sleep 5
を入れてみましたが、今度は別のシートでエラーがでて、しかもRunのたびに違うシートで引っかかる・・という泥沼です。
 
 
新しいファイルに、VBAとグラフを移植してみましたが、全く同じ状況でお手上げです・・・。
 
 
 
<<エラー1>>
     Sheets("グラフ").Select
     ActiveSheet.ChartObjects("Chart 1").Activate '←できたグラフをコピー
    ActiveChart.ChartArea.Copy
     Sheets(GAZOU).Select
     Range("A2").Select
     ActiveSheet.Pictures.Paste.Select
   
 →エラー内容
 「picturesクラスのPasteプロパティを取得できません」
  
   
   
 <<エラー2>>
  Sheets("グラフ2").Select
     ActiveSheet.ChartObjects("Chart 1").Activate '←できたグラフをコピー
    ActiveChart.ChartArea.Copy
     Sheets(GAZOU).Select
     Range("A2").Select
     ActiveSheet.Pictures.Paste.Select
   
 →エラー内容
 「データを貼り付けできません」
 
 
どうかアドバイスお願いいたします。

回答
投稿日時: 19/05/31 14:22:40
投稿者: 半平太

ドタ勘ですけども・・
 
>Application.ScreenUpdating = False
  ↑
こう言うステートメントを書いてないですか?
あったら、コメントアウトしてみて下さい、
 
>LOOPのし過ぎでCPUに負担がかかってる?と考えて
>途中に
>Sleep 5
 
Sleepの代わりに、DoEvents を2行続けて書き込むとどうなりますか?

投稿日時: 19/05/31 22:11:22
投稿者: あきこさん

半平太さん、ありがとうございます。
Application.ScreenUpdating 、何年か前まではfalseにしてたのですが
今はエラー検証のためにコメントアウトしてます。
これがワルサする事もあり得ると知れてありがたいです。
 
Do events二回は思いつきもしなかったので、さっそく月曜日にやってみます!
取り急ぎお礼まで。。。。

回答
投稿日時: 19/06/01 01:30:35
投稿者: チオチモリン

複製して移動はどうでしょうか?
 
    ActiveSheet.ChartObjects("Chart 1").Duplicate.Select
    ActiveChart.Location xlLocationAsObject, GAZOU
    Selection.Top = Range("A2").Top
    Selection.Left = Range("A2").Left

回答
投稿日時: 19/06/01 19:50:10
投稿者: mattuwan44

>Win7 Excel2013機器ではエラーが出ず、デステップインでもエラーが出ず、
>で理由がわかりません。
 
それぞれのCPUの型式とメモリーの容量を教えてください。
なにかヒントになるかも?
 
あと、
回答側でも動作確認ができるよう、コードを全文載せてみてください。
もしかしたら、誰かがデバッグを手伝ってくれるかもです。

投稿日時: 19/06/03 10:53:56
投稿者: あきこさん

mattuwan44 さん
それぞれ、2種類以上のPCで試してみまして
 
【Win10PC】
Corei5-7200U 2.5GHz メモリ8GB
Corei5-6300U 2.4GHz メモリ8GB
 
 
【Win7PC】
Corei5-6300U 2.4GHz メモリ8GB
Corei5-4310U 2GHz メモリ4GB ほか
 
という動作環境です。
 
コードを載せたいところなのですが、セルの内容を読み取って動かす部分が思いのほか長く
再現用に全文掲載するのが難しい気がしています。
上手にカットできそうなら載せてみようと思いますので、宜しくお願いいたします。
 
 
これから、半平太さんとチオチモリン のアドバイスをやってみたいと思います。
状況が変化次第、追ってコメントします。

投稿日時: 19/06/04 11:26:36
投稿者: あきこさん

経過のご報告です。
 
DoEvents2回を各loop内に3か所入れたところ、
いつものエラーが出なくなりました!
 
4回実行中、1回で今までのエラー箇所とは違うスライドで謎画像が貼りついていましたが
エラーで止まらない + 再度Runすれば正しく実行してくれる
なので、今までより大幅によくなりました。
 
ただ、ファイルの利用者が作成した私ではないこともあり
毎回正しく実行されるのがベスト・・・ということなので
 
チオチモリン さんの
>複製して移動はどうでしょうか?
 
こちらへの着手を始めたところです。

回答
投稿日時: 19/06/04 15:22:52
投稿者: 半平太

>DoEvents2回を各loop内に3か所入れたところ、
 
でしたら、DoEventsを3回にしてみてください。
 
※目的は、エクセルに描画する時間を充分与えることなので

トピックに返信