Home » エクセルマクロ・Excel VBAの使い方 » Shapesコレクション・Shapeオブジェクト » AddShapeで塗りつぶしなしに

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2110 ビルド14527.20234 Microsoft Store)

「AddShape 塗りつぶしなし」
「Shapes.AddShape 塗りつぶし無し」
といった検索キーワードで時折アクセスがあります。

Shapes.AddShape

どのアプリケーションかはわかりませんが、ShapesコレクションのAddShapeメソッドで図形を挿入して、塗りつぶしなしの状態にするには、どのようなコードを書けばいいのかを調べていた方による検索でしょう。

ここではExcel VBAのコードをご紹介しておきます。

[スポンサードリンク]

AddShapeして塗りつぶしなしにするサンプルマクロ

以下のSubプロシージャを、拙著『いちばんやさしいExcel VBAの教本』でも多用しているショートカットキー[F8]でステップ実行してみてください。

Sub AddShape後に塗りつぶし無しに設定する()
 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で塗りつぶしなしに

「Shapesコレクション・Shapeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.