
大量の図形をステンシルに保存して使えるようにしたいんだ。。。

たくさんあると大変だもんね~協力するよ~
よく使うシェイプをマスタシェイプとしてステンシルに登録すると、ドラックするだけで図面に同じシェイプを配置することができて便利ですよね?今回はそれを自動でやる方法をご紹介していこうと思います!!!ページ内に100個ある図形を全部登録する、なんて時に便利です。
ステンシルから図形を描く?!コピーする?!方法については以下を参照ください。
ステンシルに図形を保存して使えるようにしたい!

手動でVisioにマスタシェイプを登録する場合は
①左側のその他の図形から新しいステンシルを選ぶ
②左側に新規ステンシルが開く
③登録したいシェイプを選んでステンシルにドラックする
④マスタシェイプとして登録される

マスタシェイプ名はクリックすると変更できるよ
図形をマスタシェイプとして、ステンシルに保存する
構文
図形をマスタシェイプとして、ステンシルに保存する構文がこちら
Documents.Item(“ステンシルファイル名”).Drop(図形, Xpos, Ypos)
※ステンシルにDropする場合Xpos, Yposは無視される
コード


まずはMyNewStencil.vssxというステンシルが開かれている前提でっ
選択した図形をマスタシェイプに変換し、ステンシルに保存するSampleコードです。
まずMyNewStencilというステンシルを開いておいて、図形を選択します。
そして以下のコードを実行します。
Sub test1()
'選択した図形
Dim vsoSelection As Visio.Selection
Set vsoSelection = ActiveWindow.Selection
'シェイプをマスタシェイプに変換する
Dim master As Visio.master
Set master = Application.Documents.Item("MyNewStencil.vssx").Drop(vsoSelection, 0, 0)
'マスタシェイプの名前を変更する
master.Name = "MyNewMaster1"
End Sub
実行結果

ステンシルにマスターシェイプが保存されたと思います。
新規ステンシルを開いてページ内の全ての図形を全て保存します
構文
新規のステンシル(または図面)を開く構文はこちら
Documents.AddEx(“ファイル名”, 寸法の単位, フラグ, 言語ID)
※ファイル名以外は省略可、ただしステンシルを開くならフラグにvisAddStencilを指定
ファイル名について
構文の”ファイル名”の部分には新規作成するファイルの元となるファイルを指定します。
・ステンシルを基準にしないで、新しいステンシルを作成するには、(“vss/vssx”) を渡します。
・ステンシルのコピーを開くには、(“ファイルパス+ステンシルのファイル名.vss”) を渡します。
既存のステンシルをコピーしたい場合ですが、海月のPCでは以下のパスに保存されていました。どこ?と言う方はこの辺りを探してみて下さい。
Program Files (x86)\Microsoft Office\root\Office16\Visio Content\1041
※バージョンやそれぞれの設定によっては違うかもしれません
寸法の単位について
構文の中にある寸法の単位ですがこんな感じです。
定数 | 値 | オプション |
visMSDefault | 0 | コントロール パネルで設定されている地域のオプションに従う |
visMSMetric | 1 | メートル |
visMSUS | 2 | インチ |
フラグについて
構文の中にあるフラグですがこんな感じです。
定数 | 値 | オプション |
visAddDocked | 4 | 固定ウィンドウに図面を追加します。 |
visAddHidden | 64 | 非表示ウィンドウに図面を追加します。 |
visAddMacrosDisabled | 128 | マクロを無効にして図面を追加します。 |
visAddMinimized | 16 | 最小化したウィンドウに図面を追加します。 |
visAddNoWorkspace | 256 | 作業状態の情報を指定せずに図面を追加します。 |
visAddStencil | 512 | 新規のステンシル ファイルを追加します。 |
新規ステンシルを開く場合にはvisAddStencilを指定します。
visAddDockedにするとここに開きます。いつもここに開く人が多いのでは?!

定数+定数の形で指定できますよ!

コード
例えばこんな感じに図形をいくつかおいたとします。
そのページ内にある図形を全てステンシルに保存してみます。


よし!!ここから本題だ
Sample
コード
Sub test2()
' 新しいステンシルを作成
Dim newStencil As Visio.Document
Set newStencil = Application.Documents.AddEx("", visMSDefault, visAddStencil + visOpenDocked)
' ステンシルの名前を設定(保存するためのファイルパスも指定)
newStencil.Title = "MyNewStencil"
newStencil.SaveAs "C:\Users\user\OneDrive\ドキュメント\個人用図形\MyNewStencil.vssx"
Dim myshp As Shape
Dim master As Visio.master
Dim vsoShp As Visio.Shape
Dim masterCount
masterCount = 0
For Each vsoShp In ActivePage.Shapes
' シェイプをマスタシェイプに変換する
Set master = newStencil.Drop(vsoShp, 0, 0)
master.Name = "MyNewMaster" & masterCount
masterCount = masterCount + 1
Next
newStencil.SaveAs "C:\Users\user\OneDrive\ドキュメント\個人用図形\MyNewStencil.vssx"
End Sub
新規のステンシルを開いてMyNewStencilという名前で保存します。
次にFor Eachで全ての図形をマスタシェイプに変換します。
マスタシェイプの名前はMyNewMaster+カウントに変更します。
最後にステンシルを保存して終了!
実行結果

ステンシルに図形が全て保存されたのではないでしょうか?

わ~い、全部保存できた!

おめでとう♪