図形(Shape)をコピーする際に使用する、
CopyメソッドとDuplicateメソッドの違いを解説します。
同じところ
どちらも図形(Shape)を複製する際に使用します。
以下のコードはどちらも同じ動きになります。
Dim 元図形 As Shape Set 元図形 = Worksheets("Sheet1").Shapes("TextBox 1") ' 図形を同じシート内に複製(Duplicate) Dim コピー図形 As Shape Set コピー図形 = 元図形.Duplicate コピー図形.Top = 100 コピー図形.Left = 10 ' 図形を同じシート内に複製(Copy) 元図形.Copy Worksheets("Sheet1").Paste Dim コピー図形 As Shape Set コピー図形 = Worksheets("Sheet1").Shapes(Worksheets("Sheet1").Shapes.Count) コピー図形.Top = 100 コピー図形.Left = 10
違うところ
Duplicateメソッドは同じシートへの複製しかできない代わりに、
コードが簡単に書けるというメリットがあります。
Duplicateは引数がひとつもなく、
単に今いる場所の右下に図形を複製します。
その際、戻り値としてShape型を受け取ることが出来るため、
Set コピー図形 = 元図形.Duplicate
このコード単行で複製と変数Setを完了することが出来ます。
対してCopyメソッドは行先を指定する引数を持っていないため、
必ずPasteメソッドを実行する必要があります。
戻り値も持っていないためそのまま変数にSetすることはできず、
Set コピー図形 = Worksheets("Sheet1").Shapes(Worksheets("Sheet1").Shapes.Count)
このように「シートの図形数番目の図形」を取得する必要があります。
しかしながらPasteメソッドは別ブック・別シートに対しても実行できるため、
これがCopyメソッドの長所ということになります。
使い分け
違うところで解説した通り、
- 同シート内での複製ならDuplicateメソッド
- 別シート・別ブックへの複製ならCopyメソッド
を使用しておけばOKです。