マクロのテンプレートとして使用したいワークシート チャートがあります。シートをコピーしてチャート タイプのオブジェクトに割り当てようとしていますが、うまくいきません。
以下のコードには、チャート シートを作成またはコピーするための 2 行の作業コードがあります。
問題はコードの最後の行にあります。シートはコピーされますが、次の行に進む前にエラーが発生します (エラー 424 オブジェクトが必要です)。
なぜこのようなことが起こるのか、またシートを 1 行に割り当てる解決策を誰か説明してもらえますか。
現時点での私の解決策は、テンプレートをコピーして WS_chart3 をアクティブシートに設定することです。アクティブシートへの参照は、できれば避けたいのです。
Sub test()
Dim WS_chart2 As Chart
Dim WS_chart3 As Chart
'adds chart sheet but doesn't use a template
Set WS_chart2 = Charts.Add(After:=Sheets(Sheets.Count))
'adds sheet but doesn't asign in to variable WS_chart2
Sheets("template").Copy After:=Sheets(Sheets.Count)
'adds chart sheet but then errors out
Set WS_chart3 = Sheets("template").Copy(After:=Sheets(Sheets.Count))
End Sub
答え1
確実に問題となるのは、Copy メソッドがオブジェクトを返さない (何も返さない) ため、最初にコピーを作成し、次に新しいシートを取得してそれを変数に割り当てる必要があることです。
そうすればいいと思う
Dim SheetBeforeChart3 As Long
SheetBeforeChart3 = Sheets.Count
Sheets("template").Copy After:=Sheets(SheetBeforeChart3)
Set WS_chart3 = Sheets(SheetBeforeChart3 + 1)
私は Excel VBA についてはあまり詳しくありませんが、他にも問題があるかもしれません。それでも、これが少しでもお役に立てれば幸いです。