AutoCAD VBAの深淵へ:図面プロパティに「魂(ログイン名)」を刻む自動化の第一歩
こんにちは。AutoCADの自動化という荒野を切り拓く皆さんに、今日は「ただコードを動かす」だけでなく、「エンジニアとして管理と責任をコードで語る」ための第一歩を伝授しましょう。
多くの初心者が「マクロの記録」という安全圏から抜け出せずにもがいています。しかし、AutoCAD VBAの真髄は、オブジェクトモデルを理解し、図面ファイルそのものに「意味のある情報」を書き込むことにあります。
今回は、「誰がこの図面を触ったか」というトレーサビリティを、図面の「作成者プロパティ」へ自動的に刻み込むマクロを作成します。これこそが、業務効率化と資産管理の融合です。
—
1. なぜ「SummaryInfo」なのか?
AutoCADの図面には、図形データ以外に「データベース」としての属性を持っています。それが `SummaryInfo` です。
図面を開いたときに「ファイル>図面プロパティ」を確認すると表示されるあの画面、あれをプログラムから操作するのが今回の目的です。
- Environ関数: OS(Windows)から現在のログインユーザー名を引き出す「センサー」です。
- SummaryInfoオブジェクト: 図面のメタデータを司る「心臓部」です。
この二つを結合させることで、図面を開いた瞬間に、PCの所有者情報を図面の身分証明書として強制的に書き込めるようになります。
—
2. 実装コード:ログイン名をプロパティに刻む
さあ、エディタを開いてください(`Alt + F11` です)。以下のコードを標準モジュールに貼り付けてみましょう。
Option Explicit
‘ —
‘ 図面のプロパティ(作成者)にログイン名を自動設定するプロシージャ
‘ —
Public Sub StampAuthorName()
Dim acadDoc As AcadDocument
Dim info As AcadSummaryInfo
Dim userName As String
‘ 現在のアクティブなドキュメントを取得
Set acadDoc = ThisDrawing
‘ 1. OSから現在のログイン名を取得
‘ Environ(“USERNAME”) は Windows環境変数からユーザー名を引き抜く魔法の関数
userName = Environ(“USERNAME”)
‘ 2. SummaryInfoオブジェクトを取得
‘ これがないとプロパティにはアクセスできません
Set info = acadDoc.SummaryInfo
‘ 3. 作成者プロパティを更新
‘ 初心者が忘れがちなのがこの「Author」プロパティの書き込みです
On Error Resume Next ‘ 万が一のアクセスエラーを回避
info.Author = userName
On Error GoTo 0
‘ ユーザーへのフィードバック(意外と重要です)
MsgBox “図面の作成者プロパティを「” & userName & “」に更新しました。”, vbInformation, “AutoCAD自動化”
End Sub
—
3. ここがポイント:初心者が陥りやすい罠と対策
このコードを書く上で、いくつか「知っておくべき作法」があります。
① `Set` キーワードの重要性
VBAにおいて、`AcadDocument` や `AcadSummaryInfo` のような「オブジェクト」を扱う際、`Set` を忘れると実行時エラーになります。これは「代入」ではなく「参照を接続する」という儀式です。
② `Environ` 関数の限界を知る
`Environ(“USERNAME”)` は確かに便利ですが、社内のセキュリティポリシーによっては取得できない場合や、意図しない値が返ることもあります。実務では、「取得できたか?」を `If userName = “” Then` といった条件文でチェックする癖をつけると、より堅牢なコードになります。
③ `SummaryInfo` の寿命
`SummaryInfo` オブジェクトは、ドキュメントが閉じられると消滅する儚いものです。だからこそ、処理の都度 `ThisDrawing.SummaryInfo` から最新の参照を取得するのが、エンジニアとして「正しい」作法です。
—
4. さらなる高みへ:運用のアドバイス
このマクロをただボタンに割り当てるだけでなく、「図面を開いた瞬間に自動で実行」させたいと思いませんか?
それには、`ThisDrawing` の `AcadDocument_Activate` イベントを利用します。
`ThisDrawing` オブジェクトモジュール内にコードを記述することで、図面を開くたびに「誰が触ったか」が自動的にスタンプされる……そんな「管理の自動化」が実現します。
最後に
「マクロの記録」で生成される不格好なコードと、今回書いたような「オブジェクトを制御する」コード。この差は、「自分の道具を自分でコントロールしているか」という点にあります。
エラーが出ても怖がる必要はありません。`F8` キーで一行ずつ実行し、変数の中身をウォッチウィンドウで監視する。それだけで、あなたはもう「エンジニア」の仲間入りです。
次は、この情報をExcelやデータベースへ飛ばす方法を学びましょう。AutoCAD VBAの世界へようこそ。あなたの自動化の旅を、私はこれからも応援しています。
