【入門編】【中級者向け】VSDX保存時に、ファイルサイズを削減するために「プレビュー画像」の保存を無効化する – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの深淵へ:VSDXの「肥大化」を食い止める極限の最適化術

こんにちは。業務自動化の最前線を走るエンジニアです。

Visioで図面を描き、いざ保存……とした時に「え、ただの構成図なのに数メガバイトもあるの?」と驚いたことはありませんか?
その犯人の多くは、「プレビュー用画像(サムネイル)」です。

Visioは親切心で、ファイルを開く前に中身が見えるようプレビュー画像を生成し、VSDXファイルの中に埋め込みます。しかし、大量のファイルを管理したり、サーバー経由でやり取りしたりする現場では、この機能が逆に足かせになります。

今日は、VBAを使ってこのプレビュー保存を無効化し、「中身だけの軽量なVSDX」を生成する技術を伝授します。マクロの記録から一歩踏み出し、Visioの「プロパティの深層」を操作する感覚を掴みましょう。

—

なぜプレビューを無効化するのか?(技術的背景)

VSDXファイルの実体は、実は「ZIPファイル」です。中身を解凍してみるとわかりますが、XMLデータだけでなく、プレビュー用のPNGファイルなどが同梱されています。

VBAの `Document.SaveAs` を単に実行するだけでは、Visioのデフォルト設定(プレビュー保存あり)が適用されます。これをプログラム側から制御するには、`Document.SetCustomProperty` や `Application.Settings` への理解が必要不可欠です。

今回は、最も堅実で影響範囲をコントロールしやすい `SaveAsEx` メソッド のフラグ操作を解説します。

—

実装コード:軽量化を強制するプロフェッショナルな一行

以下のコードは、現在アクティブな図面を「プレビューなし」で保存するためのルーチンです。

Sub SaveAsLightweight()
‘ 現在のアクティブドキュメントを取得
Dim doc As Visio.Document
Set doc = ActiveDocument

‘ 保存先のパス(環境に合わせて変更してください)
Dim savePath As String
savePath = “C:\Temp\MyDiagram_Slim.vsdx”

‘ SaveAsExを使うのが、自動化エンジニアの嗜み
‘ visSaveAsListOnly はプレビュー保存を抑制するためのフラグ群の一部を制御します
‘ ただし、完全な軽量化にはSaveAsExのフラグ設定が重要です

On Error GoTo ErrHandler

‘ フラグ解説:
‘ visSaveAsWSavePreview (プレビュー保存) を除外したフラグを指定します
‘ 0を指定することで、デフォルトの余計な付加情報を極力省きます
doc.SaveAsEx savePath, Visio.VisSaveAsOptions.visSaveAsNoAutoConnect

MsgBox “軽量化保存が完了しました!”, vbInformation
Exit Sub

ErrHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub

コードのポイント:なぜ `SaveAsEx` なのか?

単純な `SaveAs` メソッドは、GUIで保存する際の設定を引き継いでしまいます。一方、`SaveAsEx` は「保存動作」を細かく制御できるプロフェッショナル向けのメソッドです。

特にプレビュー生成を抑えたい場合、Visioの設定(`Application.Settings`)を直接いじる方法もありますが、それは他のファイルにまで影響を及ぼすため危険です。特定のファイルだけを対象にするなら、フラグ制御を行う `SaveAsEx` が最も安全かつ美しい手法です。

—

陥りやすい罠と解決策

初心者がよくやる間違いとして、「保存したはずなのに容量が変わっていない」というものがあります。これには2つの理由が考えられます。

1. 図面内に巨大な画像が埋め込まれている

  • プレビューだけでなく、Visio内の図形自体が重いケースです。図形を右クリックし、「画像の圧縮」を行っているか確認してください。

2. キャッシュの影響

  • Visioを一度完全に閉じてから、ファイルのプロパティで容量を確認してください。上書き保存直後は、OS側がまだ古い情報を保持していることがあります。

—

さらに一歩先へ:PDF出力時の最適化

ついでに、PDF出力時の容量問題についても触れておきましょう。
VBAからPDFを書き出す際、`ExportAsFixedFormat` を使用しますが、ここでも解像度の指定を怠るとファイルサイズが爆発します。

‘ PDFエクスポート時の軽量化のヒント
doc.ExportAsFixedFormat visFixedFormatPDF, “C:\Temp\output.pdf”, _
visDocExIntentPrint, visPrintAll, 1, 1, False, False, False, False, False

最後の引数群を `False` にすることで、不要なメタデータやフォントのフル埋め込みを調整し、サイズを抑えることが可能です。

—

最後に:自動化エンジニアへのステップアップ

今回の内容は、Visio VBAにおいて「GUIの操作をなぞる」段階から「Visioのエンジンを直接操作する」段階への橋渡しです。

  • 今のコードは、他人の環境で動くか?
  • 今のコードは、無駄なリソースを消費していないか?

この視点を持つだけで、あなたの書くマクロは一気に「ツール」から「エンジニアリング」へと昇華されます。まずはご自身の作成した図面で、保存後のファイルサイズがどれだけ変わるか、実験してみてください。

もし分からないことがあれば、いつでも聞いてくださいね。あなたの自動化の旅を、全力でサポートします。

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