質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

2859閲覧

【VBA】別シートからグラフオブジェクトをコピー&ペーストしたい

kageokuri

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

オブジェクト

オブジェクト指向において、データとメソッドの集合をオブジェクト(Object)と呼びます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/04/27 09:31

編集2022/01/12 10:55

前提・実現したいこと

【別シートからグラフオブジェクトをコピー&ペーストしたい】

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/04/27 10:10

「ThisWorkbook.WorkSheet」ではなく「ThisWorkbook.Worksheets」ではありませんか? コピペで実行可能なコードを掲載されると回答しやすいです。
kageokuri

2020/04/28 01:15

失礼しました。 ご指摘有難うございます。 修正致しました。
meg_

2020/04/28 02:06

グラフのコピペのコードに問題はないように思います。WorksheetsのPasteメソッドの失敗については環境によっては起こるみたいですね。他のブックや他のPCで試しても同様にエラーになりますか?
kageokuri

2020/04/28 07:18

有難うございます。コード自体に問題がないということがわかっただけでも有難いです。 確かに環境によって異なるようです。 Windowsでは上手くいく(ただし5回に1回程度は同様のエラーとなる模様)ようですが、 macでは全く上手くいきません。 Winとmacで仕様が異なるものなのでしょうか。。
meg_

2020/04/28 08:59

「Copyメソッドによるクリップボードへのデータ保管が終わらない状態でPasteメソッドを実行していることが原因」でエラーが発生することがあるらしいです。 そこでPasteの前にDoEventsとかSleepを入れてみたらどうなりますか?
kageokuri

2020/05/11 01:31

返信が遅くなり失礼しました。 Sleepを入れることでエラーとなる割合が軽減されました。 なるほど、そういう原因なのですね。 確かにエラーとなったあとF8でステップインすると、きちんとPasteされるようです。 有難うございました。
guest

回答1

0

スクリプトでやっている作業と同じことを手作業で実行すると、エラーが起きると思います。そのエラーメッセージをもとに原因調査をされたらいかがでしょうか。

投稿2020/05/06 08:21

tohshima

総合スコア374

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問