「AddShape 塗りつぶしなし」
「Shapes.AddShape 塗りつぶし無し」
といった検索キーワードで時折アクセスがあります。
どのアプリケーションかはわかりませんが、ShapesコレクションのAddShapeメソッドで図形を挿入して、塗りつぶしなしの状態にするには、どのようなコードを書けばいいのかを調べていた方による検索でしょう。
ここではExcel VBAのコードをご紹介しておきます。
AddShapeして塗りつぶしなしにするサンプルマクロ
以下のSubプロシージャを、拙著『いちばんやさしいExcel VBAの教本』でも多用しているショートカットキー[F8]でステップ実行してみてください。
Dim shp As Shape
Set shp = ActiveSheet.Shapes.AddShape( _
Type:=msoShapeOval, _
Left:=0, _
Top:=0, _
Width:=100, _
Height:=100)
shp.Fill.Visible = msoFalse
End Sub
「ActiveSheet.Shapes.AddShape(…)」でアクティブシートの左上に円が挿入されてから、「shp.Fill.Visible = msoFalse」で塗りつぶしなしの状態になる様子が観察できるでしょう。
AddShapeメソッドの引数では塗りつぶしを設定できない
Shapes.AddShapeメソッドに指定できる引数は、
Type
Left
Top
Width
Height
の5つです。
AddShape実行時に塗りつぶし書式を設定するための引数は用意されていません。
そこでAddShapeの戻り値であるShapeオブジェクトをオブジェクト変数に代入しておいてから、
Set shp = ActiveSheet.Shapes.AddShape( _
塗りつぶしなしにする操作を行っています。
shp.Fill.Visible = msoFalse
オブジェクト変数なしでも書けるけれど…
上記のSubプロシージャは、オブジェクト変数を使わずに以下のように書くことも可能です。
Sub AddShape後に塗りつぶし無しに設定する_オブジェクト変数なし() ActiveSheet.Shapes.AddShape( _ Type:=msoShapeOval, _ Left:=0, _ Top:=0, _ Width:=100, _ Height:=100).Fill.Visible = msoFalse End Sub
結果としては同じですけれど、特にShapes.AddShapeメソッドの戻り値であるShapeオブジェクトを使って設定する操作に慣れない間は、先にご紹介したオブジェクト変数を使うコードを私はお勧めします。
Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » AddShapeで塗りつぶしなしに