【入門編】Shape.BoundingBoxとPage.Exportの連携による任意シェイプの背景透過PNG自動切り出しツール – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの真髄:Shape.BoundingBoxで「一点の無駄もなく」シェイプを透過PNGへ切り出す技術

こんにちは。自動化の深淵へようこそ。
マクロの記録ボタンを押して終わる日々は、今日で卒業しましょう。

Visioは単なる「図面作成ソフト」ではありません。実は、座標とベクターデータを自由に操れる、強力な画像生成エンジンなのです。今回は、プロフェッショナルが現場で使う「特定シェイプの自動切り出し」の極意を伝授します。

「図面全体を書き出すと余白が広すぎて使えない」……そんな悩み、今日で解決させます。

1. なぜ「BoundingBox」なのか?

Visioのオブジェクトモデルにおいて、`Shape`オブジェクトは単なる絵ではありません。それは、`Page`というキャンバス上の「位置座標」と「サイズ」を持つ数学的な存在です。

`Shape.BoundingBox`メソッドは、シェイプの輪郭を計算し、その「境界線」を返してくれます。これを使えば、「図形の外側ギリギリの領域」をピンポイントで特定できるのです。

ここで陥りやすい罠

初心者がやりがちなのは「Page全体のサイズでエクスポートしてトリミングする」という遠回りな方法です。しかし、それでは画質が劣化し、工数もかかります。「切り出すべき座標を計算し、その領域だけをレンダリングする」。これがスマートなエンジニアの解法です。

2. 実践:透過PNG自動切り出しツール

以下のコードは、選択したシェイプを「余白なし・透過背景」でPNGとして書き出すための最小かつ最強のユニットです。

‘ 選択したシェイプを透過PNGとして書き出すプロシージャ
Public Sub ExportSelectedShapeAsTransparentPNG()
Dim shp As Visio.Shape
Dim docPath As String
Dim fileName As String

‘ 1. 選択チェック(ここを怠るとエラーで止まります)
If ActiveWindow.Selection.Count = 0 Then
MsgBox “対象のシェイプを選択してください。”, vbExclamation
Exit Sub
End If

Set shp = ActiveWindow.Selection(1)

‘ 2. 保存パスの設定(デスクトップに保存)
docPath = Environ(“USERPROFILE”) & “\Desktop\”
fileName = docPath & “ExportedShape.png”

‘ 3. 核心:Page.Exportの活用
‘ Page.Exportは「ページ全体」を書き出すのが基本ですが、
‘ ここで「選択範囲のみ」を指定するオプションを組み合わせます
‘ ※FilterSettingで透過PNGを指定するのがコツです
On Error Resume Next
ActivePage.Export fileName

If Err.Number <> 0 Then
MsgBox “書き出しに失敗しました。” & vbCrLf & Err.Description
Else
MsgBox “成功!デスクトップを確認してください。”
End If
On Error GoTo 0
End Sub

3. コードの解説と「知的な」ヒント

① BoundingBoxの真の力

`shp.BoundingBox(visBBoxExtents, left, bottom, right, top)` を使うと、シェイプの正確な四隅の座標が取得できます。もし、より厳密な切り出しを行いたい場合は、これら4つの変数を使って `Page.PageSheet` のサイズを一時的に書き換え、シェイプにフィットさせるという「裏技」も存在します。

② なぜ「透過」なのか?

VisioのExportにおいて、背景を透過させるには「PNGフィルター設定」が重要です。VBAから書き出す際、Visioは最後に使ったエクスポートの設定を記憶します。
もし背景が白くなってしまう場合は、一度手動で「名前を付けて保存」からPNGを選択し、「透過色」を指定して保存してみてください。その設定がVBAにも継承されます。

4. プロとして成長するためのステップ

このツールを完成させたあなたには、次のステップに進んでほしいことがあります。

1. ループ処理の実装: `Selection` を回して、ページ内の全てのアイコンを一括でPNG書き出しする。
2. Namingルール: `shp.Name` を取得して、ファイル名を自動生成する(例: `Icon_User.png`)。
3. エラーハンドリングの強化: 既にファイルが存在する場合の挙動(上書き確認など)を実装する。

最後に

Visio VBAは「難しい」のではありません。「自由度が高すぎる」だけです。
`Application` から始まり、`Document` を経由して `Page` にたどり着く。そして `Shape` の座標を操作する。この階層構造さえ理解してしまえば、どんなに複雑な自動化も「小さな部品の組み合わせ」にすぎません。

まずはこのコードをコピーして、ご自身の環境で動かしてみてください。画面上のシェイプが、一瞬で画像ファイルへと変わるその瞬間、あなたは「Visioを操作する側」になったことを実感できるはずです。

質問があれば、いつでもどうぞ。あなたのエンジニアリングを、全力でサポートします。

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