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

スポンサーリンク

こんにちは!図面自動化の世界へようこそ。
マクロの記録ボタンを押すだけのステージから抜け出し、「自分の手でAutoCADを意のままに操りたい」と願うあなたへ。ここをクリアすれば、AutoCAD VBAの基本はバッチリですよ。

今回は、実務で絶対に役立つ「図面保存時のSummaryInfo(図面のプロパティ)自動書き込み」をテーマに、コードの裏側にある本質的な仕組みを含めて徹底解説します。

—

なぜ「SummaryInfo」を制す者が図面管理を制すのか?

皆さんは、大量のDWGファイルを開いたとき、「この図面の作成者だれだっけ?」「何版だっけ?」と迷子になったことはありませんか? エクスプローラーのプロパティ画面や、図面管理システム(PDM)で検索をかけるとき、DWGの内部データが空っぽだと、仕事の効率はガタ落ちです。

AutoCADには、図面ごとに「SummaryInfo(概要情報)」というメタデータを保持する領域が用意されています。

  • タイトル (Title)
  • 主題 (Subject)
  • 作成者 (Author)
  • キーワード (Keywords)
  • コメント (Comments)
  • ハイパーリンクベース (HyperlinkBase)

これらをVBAで「図面をセーブする直前に、プログラムが自動で最新情報を書き込む」ように仕込めば、ヒューマンエラーはゼロになり、図面資産の検索性が劇的に向上します。

—

AutoCAD VBAの心臓部:「ThisDrawing」とオブジェクトのライフサイクル

プログラミング初学者が最初に躓くのが、「今、どの図面を操作しているのか分からない」という現象です。

AutoCAD VBAの世界では、現在アクティブな図面を指し示す`ThisDrawing`という最強のオブジェクトが存在します。SummaryInfoを操作する場合も、この`ThisDrawing`の配下にある`SummaryInfo`プロパティを呼び出すことになります。

しかし、ここで一つ重要な注意点があります。
AutoCADのオブジェクトモデルにおいて、ドキュメント固有の設定(レイアウトや図面プロパティなど)は、「誰が実行しても安全なように、エラーハンドリングを仕込んでおく必要がある」ということです。例えば、図面が開かれていない状態でコードが走ると、当然エラーになりますよね。

—

実装コード:一括プロパティ書き込みマクロ

それでは、実際に動く実用コードを見てみましょう。
以下のコードを、AutoCADのVBAエディタ(`Alt + F11` で起動)の「ThisDrawing」または標準モジュールに貼り付けてください。

Option Explicit

Public Sub SetAndSaveDrawingProperties()
On Error GoTo ErrorHandler

Dim oSumInfo As AcadSummaryInfo
Set oSumInfo = ThisDrawing.SummaryInfo

‘ ==========================================
‘ 1. SummaryInfoに各プロパティを書き込む
‘ ==========================================
With oSumInfo
.Title = “自動化プラント基本配管図”
.Subject = “プロセス配管・計装図 (P&ID)”
.Author = “BIM/CAD推進室 開発チーム”
.Keywords = “AutoCAD, VBA, 自動化, 配管”
.Comments = “この図面はVBAマクロによって自動生成・プロパティが付与されています。”
.HyperlinkBase = “https://intranet.example.com/drawings/”

‘ カスタムプロパティを追加・更新する例
‘ (既存のキーがあれば更新、なければ追加するロジックを組むのがプロの技)
Dim index As Long
Dim key As String, value As String
Dim found As Boolean: found = False

For index = 0 To .NumCustomInfo – 1
.GetCustomByIndex index, key, value
If key = “Checker” Then
.SetCustomByIndex index, “Checker”, “シニアチーフ 鈴木”
found = True
Exit For
End If
Next index

‘ キーが見つからなかった場合は新しく追加
If Not found Then
.AddCustomInfo “Checker”, “シニアチーフ 鈴木”
End If
End With

‘ ==========================================
‘ 2. 図面を上書き保存する
‘ ==========================================
‘ Saveメソッドを実行することで、今書き込んだSummaryInfoもDWGに定着します
ThisDrawing.Save

MsgBox “図面のプロパティ設定と保存が正常に完了しました!”, vbInformation, “自動化完了”
Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “致命的なエラー”
End Sub

—

コードの深掘り解説:ここが実務のポイント!

ただコードをコピペするだけでは、真のエンジニアとは言えません。コードの急所を解説します。

1. `Set oSumInfo = ThisDrawing.SummaryInfo` の意味

`SummaryInfo`は、新規にオブジェクトを `New` するものではありません。「現在開かれている図面が内包しているプロパティ情報への参照(窓口)を取得する」という概念です。したがって、`oSumInfo`の値を書き換えると、直結している`ThisDrawing`側のデータも同時に書き換わります。

2. カスタムプロパティの存在

AutoCADの標準プロパティ(タイトルや作成者など)だけでなく、`AddCustomInfo` を使えば、「検図者」「進捗ステータス」「プロジェクトコード」といった独自の項目(カスタムプロパティ)を無限に追加できます。
実務では、このカスタムプロパティに社内ニッチな管理番号を埋め込むケースが非常に多いです。コード内のループ処理(`For index = 0 To .NumCustomInfo – 1`)は、「すでに同じキーが存在する場合は上書きし、なければ新規追加する」という、重複エラーを防ぐための現場で必ず役立つ安全設計になっています。

3. `ThisDrawing.Save` の重み

VBAでデータを書き換えても、図面を保存しなければディスク上のDWGファイルには反映されません。プロパティを書き換えたあとに、必ず `ThisDrawing.Save` を呼ぶことで、変更内容を確実に対象ファイルに焼き付けています。

—

陥りやすい罠とエラー回避の知見

実務でこのコードを運用し始めると、いくつかの「罠」に直面します。先輩エンジニアからのアドバイスとして、事前に共有しておきますね。

  • 罠1: 読取専用(ReadOnly)の図面を開いている
  • 現象: サーバー上の他人の図面などをReadOnlyで開いている状態で `ThisDrawing.Save` が走ると、実行時エラーになります。
  • 対策: 保存前に `ThisDrawing.ReadOnly` プロパティをチェックし、`True` の場合は保存処理をスキップする分岐を入れましょう。
  • 罠2: 日本語文字化けの恐怖
  • 現象: VBAのコード内に直接日本語を書く際、PCのロケール環境(ANSIコードページ)によっては、別の環境で開いたときに文字化けすることがあります。
  • 対策: 社内標準でUTF-8や特定の文字コード運用ルールがある場合は、外部のテキストファイルやExcelからプロパティ値を読み込ませるアーキテクチャに発展させるのがベストです。

—

おわりに

お疲れ様でした!
今回マスターした「SummaryInfoの操作」は、単なるプロパティの書き換えに留まりません。「AutoCADのオブジェクトモデルを介して、図面のメタデータをプログラムから完全に支配する」という、ドキュメント自動化の核心に触れました。

ここをクリアしたあなたなら、次は「フォルダ内の全図面(DWG)をループで開き、一括でSummaryInfoを書き換えて保存して閉じる」という、夜間バッチ処理のような高度な自動化へステップアップできます。

図面管理の手間をゼロにし、本来の設計・クリエイティブな業務に集中するための第一歩。ぜひ、あなたの現場の環境でも試してみてくださいね!

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