shiki_968
@shiki_968

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VBAでExcelに画像を貼る処理が遅い

Q&A

Closed

解決したいこと

複数のExcelに貼られた複数のグラフを、一つのExcelにまとめるアプリを作りたいです。
グラフは、変更可能オブジェクトとして貼ると処理が重くなるので、図として貼ります。

発生している問題・エラー

rangeクラスのpastespecialメソッドが失敗しました
オートメーションエラーです。
opneclipboardに失敗しました。

該当するソースコード

Set wb = Workbooks.Open(パス)
Set ws = wb.Sheets(シート名)
ws.ChartObjects(グラフ名).Chart.CopyPicture Appearance:=xlScreen, Format:=xlPicture
ThisWorkbook.Worksheets("貼り付け先").Cells(i,j).PasteSpecial

自分で試したこと

sleepで処理を遅くしましたが、エラーはなくなりませんでした。

0

2Answer

掲載されたコード試してみましたがこちらでは特に問題ないようです。
対象のエクセルシート自体が重すぎて処理が出来てないのかもしれませんね。
sleepだとWindowsのメッセージ処理自体が止まってしまうのでよくないです
Doeventsを使用することを検討してみてはどうでしょう
for i=0 to 1000
sleep(10)
Doevents
next
みたいな処理を間に入れるとうまくいくかも?

1Like

Comments

  1. @shiki_968

    Questioner

    ありがとうございます。
    対象の図は1000件のデータから作成した散布図で、重いです。

    おっしゃるように、Doeventsを使用するとできるようになりました。ただ、直接入れると同様のエラーが出たので、以下のサイトを参考にしました。
    https://vbabeginner.net/doevents/

「マクロの記録」で作られた、以下のコードではどうでしょうか?

Set wb = Workbooks.Open(パス)
Set ws = wb.Sheets(シート名)
ws.ChartObjects(グラフ名).Activate
ActiveChart.ChartArea.Copy
    
ThisWorkbook.Activate
Worksheets("貼り付け先").Activate
Cells(i, j).Activate
ActiveSheet.Pictures.Paste.Select

掲示されたコードは当方の環境ではコピーできましたので、エラーが起きる他の条件があるのでしょうね。それによっては、上のコードでもエラーが起きるかも?

1Like

Comments

  1. @shiki_968

    Questioner

    ありがとうございます。エラーの原因は、重いグラフを大量に貼り付けるせいです。

Your answer might help someone💌