新しいオートシェイプを作成します。
構文 Object.AddShape(Type, Left, Top, Width, Height)
設定項目 内容
Object Shapesコレクションオブジェクト [省略不可]
Type 作成するオートシェイプの種類を指定 [省略不可]
Left オートシェイプの左端位置を指定 [省略不可]
Top オートシェイプの上端位置を指定 [省略不可]
Width オートシェイプの幅を指定 [省略不可]
Height オートシェイプの高さを指定 [省略不可]
次のサンプル1は、アクティブシートの指定したセル範囲の位置に新しいオートシェイプを作成します。
●サンプル1●
Sub AddShapeSamp1()
With ActiveSheet.Range("B3:D8")
ActiveSheet.Shapes.AddShape(Type:=msoShapeHeart, _
Left:=.Left, Top:=.Top, Width:=.Width, Height:=.Height).Select
'---B3:D8の範囲に、ハート形のオートシェイプを作成する
End With
End Sub
引数Typeで作成するオートシェイプの種類を指定します。このコードでは、ハート型の図形を作成します。作成する位置と大きさはLeft/Top/Width/Heightの4つの引数で指定します。使用する単位はポイントです。対象文書の左上の位置を0とした座標上にて指定を行うのですが、これはRangeオブジェクトのLeft/Top/Width/Heightプロパティと同じです。したがって、Rangeオブジェクトを使用すれば、作成する場所をイメージしやすいでしょう。
なお、引数Typeで指定するオートシェイプの種類はMsoAutoShapeTypeクラスの定数で指定します。次のサンプル2を実行すると、定数とその定数が示すオートシェイプの種類の一覧表をワークシートに作成します。
●サンプル2●
Sub AddShapeSamp2()
Dim c As Range
Dim myShape As Shape
On Error Resume Next '---作成できないオートシェイプがあるためエラー発生抑止
For Each c In Range("A2:A140") '---この位置にオートシェイプ作成する
Set myShape = ActiveSheet.Shapes.AddShape( _
Type:=c.Offset(, 2).Value, _
Left:=3!, Top:=c.Top + 3!, _
Width:=c.Width - 6!, Height:=c.Height - 6!)
'---cの2列分横のセルに、定数の示す値が入力されている
'---cの中央付近にオートシェイプを作成する
myShape.Name = c.Offset(, 1).Value '---(1)オートシェイプに名前を付ける
Next c
ActiveSheet.Shapes("msoShapeActionButtonHome").Select
'---(2)つけた名前でオートシェイプを参照し選択している
End Sub
なお、AutoShapeTypeプロパティを使用すると対象のオートシェイプの種類を変更することができます。その際に使用する定数は、AddShapeメソッドの引数Typeで指定するものと同じです。
●ポイント●
サンプル2では、(1)のステートメントで作成した図形に名前を付け、(2)のステートメントでそれを利用して特定の図形を参照しています。対象となる文書中に複数の図形が存在する可能性がある場合には、作成時に特定できる名前を付けておくと、後から図形を操作する際に便利です。