シェイプシートとは?VBAで表示・設定する方法

シェイプシートとは?のアイキャッチ VBA

図形の位置とか、色とかの情報ってどこに書いてあるの?

シェイプシートというのがあってそこに書かれているんだ

シェイプシートってみたことがありますか?それぞれの図形の位置情報や色、線の太さ等々の情報が書かれているシートがありまして。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だよ。

実行結果

四角形の色が赤に変わったと思います。

シェープシートとの対応が分かると、いろんなコードが描けるね

タイトルとURLをコピーしました