ステンシルを図に描く方法教えて~
ステンシル?ドラックして配置すれば良いのかな?
Visioといえば便利なのがステンシルですよね?ボタン1つで特定のステンシルをまとめて配置できたら良いな♪という場面もあるかと思います。ということで今回はステンシルをVBAで呼び出す方法をご紹介します。
ステンシル&マスタシェイプについて前置き
このページにたどり着いたということは、ステンシルはご存じだと思いますが一応ご紹介しますね。
Visioは図形やシンボル、設計図のパーツなんかをステンシルというシートに保存しておくことができます。こちらのスクショでは左側にある赤いシートが「ステンシル」です。こちら実態は~~.vssxというファイルになっています。
そして、ステンシルに保存してある図などをマスタシェイプと言います。シートに入っている1個1個の図がマスタシェイプです。ページにドラックすることで配置することができます。
まずはステンシルを開く方法
マスタシェイプをドックする前にステンシルを開くよ!
ステンシルを開かないでマスタシェイプをドラックしようとすると、「無効なドキュメント~」とエラーが出てしまうのでまずは開きます。
構文
ステンシルを開く構文はこちら。
Documents.OpenEx “ステンシルのファイル名.vssx”, フラグ
※フラグは省略不可
ステンシルのファイル名について
ステンシルのファイル名ですが、海月のPCでは以下のパスに保存されていました。どこ?と言う方はこの辺りを探してみて下さい。
Program Files (x86)\Microsoft Office\root\Office16\Visio Content\1041
インストール時に既に入っているステンシル達です。バージョンやそれぞれの設定によっては違うかもしれませんし、自作のステンシルは保存場所が指定できます。
こちらはフォルダ内のスクショです。ファイルを選択するとタイトルなどが出てくるので、使いたいステンシルを見つけて下さいね。
フラグについて
構文の中にあるフラグですがこんな感じです。
定数 | 値 | オプション |
visOpenCopy | &H1 | 指定したステンシルのコピーを開く |
visOpenRO | &H2 | 読み取り専用で開く |
visOpenDocked | &H4 | ドッキングされたウインドウで開く |
visOpenDontList | &H8 | 最近開いたドキュメントに表示させない |
visOpenMinimized | &H10 | ステンシルを最小化して開く |
visOpenRW | &H20 | 書き込み可で開く |
visOpenHidden | &H40 | ステンシルを非表示で開く |
visOpenMacrosDisabled | &H80 | マクロ無効で開く |
visOpenNoWorkspace | &H100 | ワークスペース情報なしで開く |
何じゃこりゃ・・・?!
聞きなれないけどよく使うのはvisOpenDockedかな?
マスタシェイプを配置したいだけならvisOpenRO+visOpenDockedでOKです。
visOpenDockedにするとここに開きます。いつもここに開く人が多いのでは?!
そうでないと別ウィンドウで開きます。
マスタシェイプを図に描く(ドラック)する方法
構文
マスタシェイプやシェイプをドラックする構文はこちら。マウスでドラックしたのと同じになります。
Page. Drop (Item(“ステンシルファイル名.vssx”).Masters.ItemU(“マスタシェイプ名”), xPos, yPos)
※xPos, yPosは指定しない限り単位はインチ
Sample
コード
Sub test1()
'ステンシルを開きます
Application.Documents.OpenEx "WEBMAP_M.vssx", visOpenRO + visOpenDocked
'マスタシェイプをページにドラックします
Application.ActiveWindow.Page.Drop Application.Documents.Item("WEBMAP_M.vssx").Masters.ItemU("Search"), 3.88731, 3.267716
End Sub
ステンシルを開いて、HTML(地球儀マーク)をドラックします。
実行結果
無事マスタシェイプをドラックすることができたと思います。
その他もろもろ気になる点は他の記事で書こうと思います!
ここまで読んできて気になることがあったと思います。
例えば、
ステンシルのファイル名をインストールフォルダから探すのは非効率的だよね・・・
VBAでステンシルにマスタシェイプを登録することはできないの?
などなど当然気になるところも多いですが、長くなってしまいそうなので別の記事で書こうと思いま~す。