【実務・中級編】【実務中級者向け】図面保存時の「SummaryInfo」自動書き込み:作成者やタイトル等のプロパティ一括管理 – AutoCAD VBA解析バイブル

スポンサーリンク

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`への書き込みは、一度構築してしまえば、手作業によるミス(入力漏れ・表記揺れ)をゼロにできる。

あなたが目指すべきは、ツールを作って終わりではない。「どの図面にも必ずこの情報が入っている」という状態を標準化することだ。それができれば、後の工程で図面管理ソフトを導入しようが、検索エンジンを作ろうが、あなたのデータは「資産」として即座に活用できる。

コードをコピペして満足するな。この仕組みを貴社の標準ワークフローにどう組み込むか、そこまで設計して初めて、真の自動化エンジニアと言える。

さあ、退屈な手入力からは今すぐ卒業しよう。

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