図形の位置とか、色とかの情報ってどこに書いてあるの?
シェイプシートというのがあってそこに書かれているんだ
シェイプシートってみたことがありますか?それぞれの図形の位置情報や色、線の太さ等々の情報が書かれているシートがありまして。VBAでシェイプシートをいじれる方法を知っておくと、色々な設定ができて便利です。
シェイプシートの開き方
まずはシェイプシートの表示方法からご紹介します。
シェイプシートを見たい図形を右クリックして、シェイプシートの表示を選びます。または図形を選んでおいて、メニューの開発タブを開きシェイプシートの表示、図形(S)を選びます。
するとこんな表のようなものが出てきたのではないでしょうか?これがシェイプシートです。
例えば図形の塗りつぶし設定はFill Formatの中のFillForegndに書かれています。ここでは「=THEMEGUARD(RGB(255,0,0))」の赤ですね。
こんなところに書かれているんだねっ。
VBAでシェイプシートを使う時に知っておきたい情報
シェイプシートの情報を取得・設定するにはSection,Row,Columnインデックスが必要になるよ。
セクションインデックス
シェイプシートの中にある表はいくつかのグループ(Section)に分かれていて、Sectionインデックスはそれを示します。ちなみにシェイプシートはページや図面に対してもあるので、レイヤーとかハイパーリンクなんかもあります。
以下がセクションインデックスの定数例
良く使いそうな定数の例です。それ以外の定数を知りたい方はVBAヘルプの「VisSectionIndices」を参考にして下さい。
定数 | 説明 |
visSectionObject | 幅、高さ、色など一般的な設定 |
visSectionCharacter | テキストのフォントなど文字に関する設定 |
visSectionParagraph | テキストのインデント、余白など段落に関する設定 |
visSectionConnectionPts | オブジェクトの接続ポイントに関する設定 |
visSectionHyperlink | ハイパーリンクに関する設定 |
visSectionTab | タブ位置に関する設定 |
visSectionTextField | オブジェクトのテキスト フィールドに関する設定 |
Rowインデックス
名前からするとRow=行のインデックスだよね?
行っていうより表の見出しに対応しているみたい
シェイプシートの表の青いところに書いてある名前が、Rowインデックスに対応しています。名前の付け方はセクションインデックスより分かりやすくて、大体が表の名前と一致します。
例えばLine Format(線の設定)ならvisROWLine、Fill Format(塗りつぶしの設定)ならvisFillとなります。
基本的に『visRow + 表の名前』がRowインデックスの定数になっている。
Columnインデックス
シェイプシートの各設定の欄に書いてある名前が、Culumインデックスに対応しています。名前の付け方はまずRowインデックスの名前を入れ、続けて各設定の名前を入れます。
例えばLine Weight(線の太さ)ならvisROWLine、Fill Format(塗りつぶしの設定)ならvisFillとなります。
基本的に『各設定の名前』がClumインデックスの定数になっている。
シェイプシートの設定を変える方法
構文
Visio VBAでシェイプシート内の情報を取得・設定構文はこちら。
CellsSRC(Section,Row,Column) = 設定値
※引数のSection,Row,Columnインデックスについてはこちらを参考
これさえあれば細かい設定もOKだね
Sample
図形の色を変えます。
こんな感じで図形を描いて選択しておきます。
コード
Sub test1() '色を変えます。 ActiveWindow.Selection.CellsSRC(visSectionObject, visRowFill, visFillForegnd) = 3 End Sub
塗りつぶしの色をカラーインデックス3(緑)に変えます。
実行結果
四角形の色が緑に変わったと思います。
良く使われる設定は短縮Ver.で描ける
図形の色を変えるだけなのに、イチイチCellsSRC(Section,Row,Column)はちょっと長くない?!
設定によっては短縮Ver.もあったりするよ
Cells(“LineWeight”)、Cells(“Width”)、Cells(“FillForegnd”)など良く使われる設定には短縮Verもあります。Cellsの引数は””表の項目の名前
Cells(“シェイプシートの項目”) = 設定値
Sample
Sub test2() '色を変えます。 ActiveWindow.Selection.Cells("FillForegnd").Formula = "RGB(255,0,0)" End Sub
シェイプシートの項目だけ指定すればOKだよ。
実行結果
四角形の色が赤に変わったと思います。
シェープシートとの対応が分かると、いろんなコードが描けるね