ショートプログラム
VisioToolBox  

ステンシルにVBAを組み込んだ「チョットだけ便利なマクロ群」を紹介します。(2007.9.21)
シェイプの置き換えマクロをVisioToolBoxに追加したのを機会に説明も作り直しました。
VisioToolBox.vssはVisioToolBox.LZH(40kb)からダウンロードしてください。
ダウンロードした圧縮ファイルは解凍し、適当なフォルダへ入れて下さい。
解凍して出来たステンシル(VisioToolBox.vss)には以下の4種類のマクロが入っています。
1:Portrait(縦)
Visioの図面を部分的に印刷することが出来ます(2のLandscapeも同じ)

ステンシルから「Portrait」を図面上にドロップすると赤い破線枠が表示されます。
この破線枠を伸縮させて印刷したい範囲を決定します。

印刷範囲が決まったら、Portraitシェイプを右クリックして「用紙サイズの変更」を選びます。

「用紙サイズの変更」を選ぶとマクロが動き、Portraitシェイプの大きさに図面の用紙範囲を一致させます。

あとはVisioの「ファイル/ページ設定」から「プリンターの設定」タブを選択して「プリンタの用紙」で用紙サイズと印刷方向を合わせ、さらに「拡大縮小印刷」を自動調整「横1枚、縦1枚」にしてから印刷してください。
注意!
「Portrait」と「Landscape」で用紙サイズの変更を行った場合、「戻る」では元の用紙サイズに戻りません。
マクロの概要
図面用紙の大きさを指定できることを逆用しただけです。
ただVisioの図面用紙枠と実際の印刷用紙の縦横比率を同じにしておかなければ歪んだ印刷結果になるので縦横比が印刷用紙と一致するようにシェイプを工夫しています。
A、B用紙の大きさは縦横比が1:√2と決まっているのでシェイプのWidth(Height)を1:√2にする関数をGUARD関数で保護してあげれば紙と図面用紙枠の比率は一致します。
余談ですが「Portrait」と「Landscape」でマスタシェイプを分けているのは、私の使い勝手が良いからで、それ以外の理由はありません。
で、図面用紙枠をシェイプに一致させる方法ですが、単に用紙のWidth(Height)を変えただけでは図面用紙枠は左下からの大きさになってしまうので図
面上のシェイプをズラさなければいけません。具体的には全てのシェイプをPortrait(Landscape)シェイプのピン位置分だけオフセットします。当然、シェイプの作り方次第で移動できないものが出てくるかもしれません。そこはマァ習作ということで諦めてください。
2:Landscape(横)
Portraitが縦方向、Landscapeが横方向。説明はPortraitの項を読んでください。
3:Clear Shape
Visioで図面を作っていくと「いつの間にやらメガ単位の図面が出来上がってしまった」って事はありませんか?Visioは一旦使ったマスターシェイプは図面上から削除してもローカルステンシルに残ったままになります。
つまりステンシルからシェイプをドロップして削除して・・・を繰り返すと図面上の見かけは軽くても激重な図面が出来てしまうのです。
回避するには「ウィンドウ/図面のマスタシェイプ一覧」でローカルステンシルを開き1個1個削除していくしかないのです。マスタシェイプが10個くらいなら気にしませんが100個とか200個になると大変な作業になってしまいます。
そこで、何とか自動化できないかと考えて作ったのが「Clear Shape」です。
実は「Clear Shape」を作る以前から、旧Visio社のホームページで不要なマスタシェイプを削除する「Clean It」というツールが公開されていたんでが、「どうせ英語版だから動かないんだろう」と思って使わなかったんです。(これは後日、日本語環境で動くことが確認されました)
使い方は「Clear Shape」を図面にドロップするだけで動きます。
※本機能は、Visio2007およびVisio2010では標準で装備されています。
| Visio2007: | 「ファイル」メニューの「隠し情報の削除」を実行し、「ファイルサイズの縮小」タブで削除するアイテムを選択します。 |
| Visio2010: | 「ファイル」タブの「情報」の「ファイルサイズの縮小」を実行し、「ファイルサイズの縮小」タブで削除するアイテムを選択します。 |
マクロの概要
マスタシェイプと全ページのシェイプを比較してページ上にマスタシェイプのメンバが存在しないときはマスタシェイプを削除します。
未使用のレイヤやスタイル等を削除する機能はありません。
VBAで作っているのと余分な処理がない分「Clean It」より高速です。
4:Change Shape
あるシェイプを別なシェイプで置き換えるマクロを作りました。
ステンシルから「Change Shape」を図面上にドロップするとダイアログが出てきます。

「置換前のシェイプ」と「置換後のシェイプ」を選択して実行するとシェイプが置き換わります。
マクロの概要
アクティブページの全シェイプが「置換前」から、ローカルのマスタシェイプ一覧が「置換後」から選択出来ます。
ステンシルにマクロを組み込んだ都合上、図面で置き換え範囲を予め指示しておくという方法が取れません(シェイプをドロップした時点で選択が解除される)
解決策としては「Change Shape」をテンプレートに仕込んでマクロの起動方法を変える等が考えられます。
置き換えはPinX、PinY、Angleを転記しているので、Flipやコントロールハンドルで回転させる一部のシェイプでは角度が一致しません。
