AutoCAD VBAを掌握する:図面プロパティ「SummaryInfo」の完全制御と自動化の極意
AutoCADの図面管理において、エクスプローラーから見える「図面のプロパティ」を軽視していないだろうか。ファイル名だけで図面を識別する時代は終わった。大規模プロジェクトや複数人での共同作業において、`SummaryInfo`を適切に制御することは、単なる整理整頓ではなく、資産管理の根幹である。
今回は、実務で即戦力となる「保存時に自動でプロパティを流し込む」ための堅牢な実装ノウハウを伝授する。
—
1. なぜ「SummaryInfo」への直接アクセスが必要なのか
初心者は、図面内の「属性ブロック」だけで情報を管理しようとする。しかし、属性ブロックは図面を開かないと検索できない。一方で、`SummaryInfo`に格納されたデータは、Windowsの検索インデックスや外部の資産管理システムから、「図面を開くことなく」抽出可能だ。
このインターフェースを制する者は、AutoCADの資産運用を制する。
堅牢な設計のための鉄則
- イベント駆動の徹底: 保存ボタンを押した瞬間に実行するのではなく、`BeginSave`イベントをフックせよ。
- 例外処理の標準化: `SummaryInfo`は設定されていないキーにアクセスするとエラーを吐く。存在チェックを怠らないこと。
- 保守性の確保: 書き込む項目はハードコーディングせず、外部設定ファイル(または定数クラス)で管理せよ。
—
2. 【プロダクションコード】SummaryInfo 操作の最適解
以下のコードは、`ThisDrawing`オブジェクトのイベントを利用し、図面保存時に「設計者」「管理番号」「プロジェクト名」を自動更新する実装例だ。
‘ ————————————————————————-
‘ クラスモジュール: ThisDrawing (またはイベント管理クラス)
‘ ————————————————————————-
Private Sub AcadDocument_BeginSave(ByVal FileName As String)
On Error GoTo ErrorHandler
‘ 1. SummaryInfo オブジェクトを取得
Dim si As AcadSummaryInfo
Set si = ThisDrawing.SummaryInfo
‘ 2. 必要なプロパティを更新
‘ カスタムプロパティが存在しない場合は追加し、存在する場合は上書きする
Call UpdateCustomProperty(si, “ProjectCode”, “PRJ-2023-A01”)
Call UpdateCustomProperty(si, “Designer”, “Engineering_Dept_01”)
‘ タイトル等の標準プロパティも更新可能
si.Title = “自動生成図面_” & Format(Date, “yyyyMMdd”)
Exit Sub
ErrorHandler:
MsgBox “SummaryInfoの更新中にエラーが発生しました: ” & Err.Description, vbCritical
End Sub
‘ ————————————————————————-
‘ ヘルパー関数: カスタムプロパティの安全な更新ロジック
‘ ————————————————————————-
Private Sub UpdateCustomProperty(si As AcadSummaryInfo, key As String, value As String)
Dim i As Integer
Dim exists As Boolean
exists = False
‘ 既存のカスタムプロパティを検索
For i = 0 To si.NumCustomInfo – 1
Dim k As String, v As String
si.GetCustomByIndex i, k, v
If k = key Then
si.SetCustomByIndex i, value
exists = True
Exit For
End If
Next i
‘ 存在しない場合は新規追加
If Not exists Then
si.AddCustomInfo key, value
End If
End Sub
—
3. 実務で直面する「落とし穴」と解決策
① バージョン互換性への配慮
AutoCADのバージョンによって、`SummaryInfo`の挙動に微妙な差異があることは稀だ。しかし、最も危険なのは「参照設定の不一致」である。`AcadSummaryInfo`はAutoCADのタイプライブラリに含まれているため、コードを書く際は必ず最新のライブラリを参照すること。
② 大量バッチ処理時のパフォーマンス
数百枚の図面に対してこの処理を走らせる場合、`BeginSave`イベントだけでは不十分だ。
- サイレント保存: `Application.DocumentManager.MDIActiveDocument.Save`をループさせる際は、必ず`AutoCAD.Application.Visible = False`でバックグラウンド処理を行い、ユーザー入力待ちのダイアログを強制的に閉じる実装が必要だ。
③ データベース連携のヒント
このVBAツールを「入口」とし、ExcelやSQL Serverと連携させる場合、「図面パス(FullFileName)」をキーにするのが定石だ。プロパティを読み取る専用の小さなVB.NETコンソールアプリ(`AcCoreConsole.exe`を使用)を作成すれば、AutoCAD本体を起動せずにプロパティをリスト化できる。これこそが、アーキテクトが目指すべき「図面管理の自動化」である。
—
結論:自動化は「標準化」から始まる
`SummaryInfo`への書き込みは、一度構築してしまえば、手作業によるミス(入力漏れ・表記揺れ)をゼロにできる。
あなたが目指すべきは、ツールを作って終わりではない。「どの図面にも必ずこの情報が入っている」という状態を標準化することだ。それができれば、後の工程で図面管理ソフトを導入しようが、検索エンジンを作ろうが、あなたのデータは「資産」として即座に活用できる。
コードをコピペして満足するな。この仕組みを貴社の標準ワークフローにどう組み込むか、そこまで設計して初めて、真の自動化エンジニアと言える。
さあ、退屈な手入力からは今すぐ卒業しよう。
