こんにちは!Visioの自動化の世界へようこそ。
マクロの記録ボタンを押して、生成されたコードをそのまま動かしてみたものの、「なんだか動きが遅いな」「保存したファイルの容量が無駄に大きくなっている気がする…」と違和感を覚えたことはありませんか?
それ、もしかしたら「余計なプレビュー画像」が原因かもしれません。
今回は、プログラミング初学者や「マクロの記録」から一歩抜け出したいあなたに向けて、Visio図面の保存時にファイルサイズを肥大化させる元凶を断ち切り、動作を劇的に軽くする実践的なテクニックを伝授します。
ここをクリアすれば、Visio VBAの根幹である「オブジェクトの操作」の基本はバッチリですよ!一緒に優しく紐解いていきましょう。
—
1. なぜVisioのファイルはすぐに肥大化するのか?
Visioで図面を描いて保存すると、VSDXファイルの中に「プレビュー用の一枚絵(画像)」が自動的に埋め込まれます。このプレビューは、Windowsのエクスプローラーでフォルダを開いたときに、Visioを起動しなくても中身の図がアイコンとして見えるようにするための親切機能です。
しかし、業務で何十ページもある複雑なフローチャートやネットワーク図を描くとき、この親切機能が「巨大な足かせ」になります。
保存するたびに重たい画像が生成され、ファイルサイズが数MBから数十MBへと膨れ上がり、保存処理そのものもモタつく原因になるのです。
「図面の中身(ベクターデータ)は大したことないのに、なぜかファイルが重い…」
そんなときは、このプレビュー画像の生成をVBAでビシッと無効化してしまいましょう。
—
2. 解決の鍵は「Documentオブジェクト」にある
Visio VBAの世界では、今まさに開いている(あるいは操作している)図面ファイルの全体を`Document`(ドキュメント)オブジェクトと呼びます。
この `Document` には、ページや図形だけでなく、ファイル自体の設定を司る様々なプロパティ(性質・設定値)が用意されています。プレビュー画像の保存をオフにするのも、この設定の一つです。
「難しそう…」と思う必要はありません。操作はたった1行です。
‘ プレビュー画像の保存を禁止する(オフにする)設定
ActiveDocument.PreviewPicture = False
たったこれだけです! `ActiveDocument`(今手元にある図面)の `PreviewPicture` プロパティに `False`(無効)を代入するだけで、無駄なプレビュー画像の生成をピタッと止めることができます。
—
3. 実践!安全にファイル保存&軽量化を行うVBAコード
それでは、実際に現場でそのままコピペして使える、実用的なマクロのコードを見てみましょう。
単に設定を変えるだけでなく、「上書き保存」を安全に行う一連の流れを記述しています。
Sub SaveWithoutPreview()
‘ エラーハンドリングの準備
On Error GoTo ErrorHandler
Dim targetDoc As Document
Set targetDoc = ActiveDocument
‘ 【核心】プレビュー画像の生成を無効化する
‘ これにより、保存時の処理速度が上がり、ファイルサイズもスリムになります
targetDoc.PreviewPicture = False
‘ すでに一度保存されているファイルであれば、上書き保存を実行
‘ ※一度も保存されていない(名前を付けて保存が必要な)場合はパスのチェックが必要です
If targetDoc.Path <> “” Then
targetDoc.Save
MsgBox “プレビュー画像をオフにして、ファイルを高速保存しました!”, vbInformation, “完了”
Else
‘ まだ名前がない場合は「名前を付けて保存」を促す
Dim savedPath As Variant
savedPath = Application.GetSaveAsFileName(“図面ファイル”, “.vsdx”)
If savedPath <> False Then
targetDoc.SaveAs CStr(savedPath)
MsgBox “新規ファイルとして保存しました(プレビューなし)。”, vbInformation, “完了”
End If
End If
Exit Sub
ErrorHandler:
‘ 万が一エラーが起きたときの優しいてあて
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “警告”
End Sub
コードのポイント解説
1. `Dim targetDoc As Document`
今操作している図面を変数にしっかりと代入しています。コードの可読性がグッと上がり、予期せぬバグを防げます。
2. `targetDoc.PreviewPicture = False`
これが今回の主役です。この設定は一度変更してファイルを保存すると、その図面ファイル自体に記憶されます。
3. `targetDoc.Path <> “” ` のチェック
新規作成しただけで、まだ一度も保存場所が決まっていないファイルに対して `.Save` を呼ぶとエラーになります。実務でマクロを組むときは、こうした「まだ保存されていない状態」への配慮がプロの技の見せ所です。
—
4. 初学者が陥りがちな「罠」と注意点
ここで、初心者のうちにハマりやすいポイントを一つ共有しておきます。
> Q. マクロで `PreviewPicture = False` にしたのに、次に別の人に渡したらプレビューが復活してたんですが…?
>
> A. この設定は「その図面ファイル(Document)ごとの設定」です。新しく白紙の図面(新しいドキュメント)を開いたときは、Visioのデフォルト設定(プレビューあり)に戻ってしまいます。
もし、あなたが作るすべてのVisio図面でこの恩恵を受けたい場合は、「定型フォーマット(ひな形となるVSDXファイル)」の段階で `PreviewPicture = False` に設定し、そのファイルをコピーして使い回すという運用にするのが、プログラミングエンジニアとしては最もスマートで確実なアプローチです。
—
まとめ
今回は、Visio図面の保存時にファイルサイズを肥大化させる「プレビュー画像」を無効化するテクニックを解説しました。
- Visioのファイルが重い原因は、エクスプローラー用のプレビュー画像にある。
- VBAから `ActiveDocument.PreviewPicture = False` を指定するだけで、軽量化と高速化が同時に手に入る。
- オブジェクト(`Document`)のプロパティを操作する感覚は、他のOfficeアプリ(ExcelやWord)のVBAにも通じる基本中の基本。
ここをクリアできれば、単なる「操作の記録・再生」のレベルを完全に卒業し、自分の意のままにVisioをコントロールするエンジニアの第一歩を踏み出したことになります。
日々の業務自動化ライフを、もっと軽快に、もっとスマートにしていきましょう!それではまた次の知見でお会いしましょう。
