Visio VBAの深淵へ:PDF/A準拠で図面を書き出し、長期保存の要塞を築く
「マクロの記録」ボタンを押して、生成されたコードの羅列を見て「これでいいのかな?」と不安になったことはありませんか?
Visio VBAをマスターするということは、単に自動化するだけでなく、Visioのエンジンを思い通りに制御する権限を手に入れることに他なりません。
今回は、中級者へのステップアップとして、単なるPDF出力ではなく、長期保管の国際規格である「PDF/A」形式での出力方法を伝授します。これを知れば、あなたの作成した図面は10年後、20年後も正しく開ける「資産」へと変わります。
—
1. なぜ「PDF/A」なのか?
通常のPDF出力は「見た目」を保存するだけですが、PDF/Aは「長期保存」を前提としています。フォントの埋め込みが必須であり、外部環境に依存しない構成が保証されます。
Visio VBAでこれを制御するために重要なのが、`FixedFormatSettings` オブジェクトです。こいつを使いこなせば、ファイルサイズ、画質、そしてPDF/A準拠設定まで、すべてをコードで支配できます。
—
2. 実装の設計図:PDF/A出力の全貌
まずは、以下のコードをご覧ください。これが、現場で「動く」かつ「美しい」と言われる実装の雛形です。
Public Sub ExportToPDFA()
Dim vsoDoc As Visio.Document
Dim strPath As String
‘ 1. 現在のアクティブドキュメントを取得
Set vsoDoc = ActiveDocument
strPath = ThisDocument.Path & “Exported_Document.pdf”
‘ 2. 出力設定用オブジェクトの作成
‘ FixedFormatSettingsはPDFやXPSの設定を司る司令塔です
Dim vsoSettings As Object
Set vsoSettings = Application.ActiveWindow.Page.ExportAsFixedFormat( _
visFixedFormatPDF, _
strPath, _
visDocFromPage, _
visDocAllPages, _
0, 0, _
False, True, True, True, False, _
Nothing) ‘ ここでNothingを渡すと規定の設定になる
‘ 3. PDF/A準拠のための詳細設定(ここが肝!)
‘ FixedFormatSettingsにはプロパティが隠されています
‘ ※Visioのバージョンによっては、Exportメソッドの引数で制御します
On Error Resume Next ‘ 万が一の設定エラーを回避
vsoDoc.ExportAsFixedFormat _
FixedFormat:=visFixedFormatPDF, _
OutputFileName:=strPath, _
Intent:=visImageIntentPrint, _
PrintRange:=visDocAllPages, _
FromPage:=1, _
ToPage:=vsoDoc.Pages.Count, _
IncludeBackground:=True, _
IncludeDocumentProperties:=True, _
IncludeStructureTags:=True, _
UseISO19005_1:=True ‘ ★これがPDF/A-1b準拠の魔法のスイッチです
If Err.Number = 0 Then
MsgBox “PDF/A出力が完了しました。”, vbInformation
Else
MsgBox “エラー発生: ” & Err.Description, vbCritical
End If
End Sub
—
3. コードの「解像度」を上げる:知っておくべき極意
コードを見て「引数が多すぎて気が遠くなる」と思いましたか?大丈夫です。最も重要なのは `ExportAsFixedFormat` メソッドの引数、特に後半部分です。
ここがプロのこだわりポイント
- `UseISO19005_1:=True`: これが今回の主役です。この引数を `True` にすることで、Visioは自動的にPDF/A-1b準拠のレンダリングを行います。これがないと、どれだけ設定をいじっても「長期保存対応」にはなりません。
- `IncludeStructureTags`: これを `True` にすると、アクセシビリティ(読み上げ対応など)のためのタグが埋め込まれます。PDF/Aの思想に合致する設定です。
- `Intent:=visImageIntentPrint`: 「印刷目的」を指定することで、解像度を保持したまま出力されます。画面用(Screen)にすると、文字がボヤけるリスクがあります。
—
4. 陥りやすい「見えない落とし穴」
現場でエンジニアがよく泣きを見るポイントを共有しておきます。
1. パスの未定義: `ThisDocument.Path` は、ファイルが一度も保存されていない(未保存の)状態では空文字を返します。必ずファイルを保存してから実行するガード節を入れましょう。
2. PDFが開いたまま: PDFリーダーで出力先のファイルを開いていると、VBAは上書き保存できずに「アクセス拒否」で落ちます。`On Error` を使って、ファイルが使用中かどうかをハンドリングする癖をつけてください。
3. フォントの欠落: PDF/Aはフォントを埋め込みますが、Visio側で「埋め込み禁止」の特殊なフォントを使っていると、出力時に警告が出るか、文字化けします。標準的なフォント(メイリオやArial)の使用を推奨します。
—
最後に:自動化の先にあるもの
ここまで理解できれば、あなたはもう「マクロの記録」に頼る初心者ではありません。VisioのAPI仕様書を読み解き、自身の意図した通りにドキュメントを生成できる「エンジニア」の入り口に立っています。
Visio VBAは一見古臭い技術に見えますが、「図面データを構造化し、資産として制御する」能力においては、今なお最強のツールです。
何か分からないことがあれば、またいつでも聞いてください。あなたの自動化の旅を、これからも全力でサポートします。さあ、次はどの作業を「一瞬」で終わらせましょうか?
