【実務・中級編】【初心者向け】Environ関数とAcadDocument.SummaryInfoの連携:図面作成者のPCログイン名を「作成者プロパティ」に自動記録する管理マクロ – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握せよ:`SummaryInfo`で築く「自動トレーサビリティ」の極意

AutoCADの運用において、最も頭を悩ませるのが「この図面、結局誰が作ったんだ?」という属人性の問題だ。図面プロパティの「作成者」欄が空欄、あるいは前任者の名前のまま放置されている図面を、君はいくつ見てきただろうか。

今回は、VBAを用いてPCのログイン名と連動し、図面を開く(または保存する)たびにプロパティを自動更新する「自動スタンプ機能」の実装を伝授する。

単なるコードの紹介ではない。現場の運用で「二度と手作業でプロパティを編集させない」ための、堅牢なアーキテクチャの解説だ。

1. なぜ「手動更新」は敗北するのか

非効率なエンジニアは、図面プロパティの入力を人間に依存させる。だが、人間は忘れるし、嘘をつく。

我々が目指すべきは「環境情報の自動取得」と「オブジェクトモデルの直接操作」の統合である。VBAの`Environ`関数でOSからログイン名を引き抜き、`AcadDocument.SummaryInfo`オブジェクトに流し込む。このプロセスを自動化することで、人的ミスを物理的に排除する。

2. 実装の要:SummaryInfoの真価

AutoCADの図面プロパティは、`AcadDocument`オブジェクトの配下にある`SummaryInfo`を通じて操作する。注意すべきは、このオブジェクトが図面ファイルと密接に紐付いている点だ。

プロダクションコード:AutoStamp実装

以下のコードは、現在のログインユーザーを「作成者」フィールドに強制的に書き込むモジュールだ。

Option Explicit

‘ ———————————————————
‘ @brief: 現在のPCログイン名をSummaryInfoの作成者に反映する
‘ @author: Chief Architect
‘ ———————————————————
Public Sub UpdateDrawingAuthor()
Dim doc As AcadDocument
Dim sumInfo As AcadSummaryInfo
Dim userName As String

‘ 現在のアクティブドキュメントを取得
Set doc = ThisDrawing

‘ Environ関数でOSのログイン名を取得
‘ “USERNAME”環境変数はWindows標準であり、信頼性が高い
userName = Environ(“USERNAME”)

‘ SummaryInfoオブジェクトを取得
Set sumInfo = doc.SummaryInfo

‘ 作成者プロパティを更新
‘ 既に値が入っている場合でも上書きを行う(最新の責任者を担保するため)
On Error Resume Next ‘ 万が一のアクセス権限エラーを抑制
sumInfo.Author = userName

If Err.Number <> 0 Then
Debug.Print “プロパティの更新に失敗しました: ” & Err.Description
Else
Debug.Print “作成者を ” & userName & ” に更新しました。”
End If
On Error GoTo 0

‘ 重要: 更新後は必ず図面を保存する必要がある
‘ 保存を自動化すべきかは運用ルールと相談すること
‘ doc.Save
End Sub

3. アーキテクトからの忠告:3つの注意点

このコードを実務に導入する際、以下の3点を徹底しなければシステムは崩壊する。

① 実行トリガーの設計

このマクロを「ボタンを押して手動実行」させてはならない。そんな運用は誰も守らない。
AutoCADの`AcadDocument_BeginSave`(保存直前イベント)や、`AcadDocument_Activate`(図面を開いた直後のイベント)と組み合わせるのがベストプラクティスだ。`ThisDrawing`モジュールのイベントハンドラを活用せよ。

② 環境変数の罠

`Environ(“USERNAME”)`は、PCのローカルアカウント名を取得する。もし社内でActive Directoryを運用しており、「氏名」を正確に取得したい場合は、WMI(Windows Management Instrumentation)を用いたネットワークユーザー名の取得を検討すべきだ。`Environ`はあくまで「PCのログイン名」であることを忘れるな。

③ 読み取り専用ファイルへの配慮

ネットワーク共有フォルダ上の「読み取り専用」ファイルに対してこのマクロを実行すると、エラーが発生する。コードの冒頭で`doc.ReadOnly`をチェックし、実行をスキップする条件分岐を入れるのが、プロの設計というものだ。

4. 次のステップ:トレーサビリティの深化

この仕組みを導入すれば、図面プロパティを見れば「誰が触ったか」が一目瞭然になる。さらに一歩進むなら、`SummaryInfo.Comments`(コメント欄)に「更新日時」をタイムスタンプとして追記するように拡張するのもいいだろう。

「自動化」とは、単に楽をすることではない。
「管理という名の労働」をソフトウェアにアウトソースし、君自身はもっとクリエイティブな設計業務に注力することだ。

これが、現場を制するエンジニアの思考様式である。早速、君の図面管理環境にこのロジックを組み込んでみてくれ。結果は必ずついてくる。

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