前提・実現したいこと
【別シートからグラフオブジェクトをコピー&ペーストしたい】
VBAでグラフを作成するマクロを作っています。
フォーマットとなるグラフ(フォーマットグラフ)を別シート(ws2)に用意しておき、
作業シート(ws1)にコピーした後、作業シート上のデータを基に系列を設定しています。
フォーマットグラフのコピーまでは上手くいくのですが、
作業シート(ws1)への貼り付けが上手くいきません。
発生している問題・エラーメッセージ
実行時エラー'1004': Worksheet クラスの Paste メソッドが失敗しました。
該当のソースコード
Sub test () '変数の宣言 Dim ws1 as Worksheet Dim ws2 as Worksheet set ws1 = ThisWorkbook.WorkSheets("作業シート") set ws2 = ThisWorkbook.WorkSheets("グラフコピーシート") ws2.ChartObjects("フォーマットグラフ").Copy ws1.Paste With ws1.ChartObjects("フォーマットグラフ") .Top = ws1.Range("D1").Top .Left = ws1.Range("D1").Left .Name = "グラフ1" End With With ws1.ChartObjects("グラフ1").Chart.SeriesCollection(1) .Name = "test1" .XValues = ws1.Range("A1:A100") .Values = ws1.Range("B1:B100") End With End Sub
補足情報(FW/ツールのバージョンなど)
Excel 2013
「ThisWorkbook.WorkSheet」ではなく「ThisWorkbook.Worksheets」ではありませんか?
コピペで実行可能なコードを掲載されると回答しやすいです。
失礼しました。
ご指摘有難うございます。
修正致しました。
グラフのコピペのコードに問題はないように思います。WorksheetsのPasteメソッドの失敗については環境によっては起こるみたいですね。他のブックや他のPCで試しても同様にエラーになりますか?
有難うございます。コード自体に問題がないということがわかっただけでも有難いです。
確かに環境によって異なるようです。
Windowsでは上手くいく(ただし5回に1回程度は同様のエラーとなる模様)ようですが、
macでは全く上手くいきません。
Winとmacで仕様が異なるものなのでしょうか。。
「Copyメソッドによるクリップボードへのデータ保管が終わらない状態でPasteメソッドを実行していることが原因」でエラーが発生することがあるらしいです。
そこでPasteの前にDoEventsとかSleepを入れてみたらどうなりますか?
返信が遅くなり失礼しました。
Sleepを入れることでエラーとなる割合が軽減されました。
なるほど、そういう原因なのですね。
確かにエラーとなったあとF8でステップインすると、きちんとPasteされるようです。
有難うございました。
