AutoCAD VBAの守護神:教育版スタンプという「時限爆弾」を検知して業務を守る
こんにちは。AutoCADの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんとなく動いた」という段階から一歩踏み出し、「業務の品質をコードで担保する」というエンジニアの領域へ足を踏み入れようとしているあなたを歓迎します。
今回は、実務において極めて危険な「教育版(Educational Version)スタンプ」の検知と制御について解説します。AutoCADの教育版で作られた図面を商用版で開くと、印刷時に「教育版で作成されました」という忌まわしいスタンプが図面の四方に刻印されます。知らずに納品してしまい、クライアントからの信頼を失う……そんな悪夢を防ぐための「門番」を、VBAで実装しましょう。
—
なぜ「教育版検知」が必要なのか?
AutoCADの図面データベース(DXB)には、作成元のライセンス情報が埋め込まれています。これを手作業で確認するのは非効率ですし、見落としが発生します。
私たちが目指すのは、「図面を開いた瞬間、あるいは保存する直前に、コードが自動的にヘッダー情報をスキャンし、教育版であれば即座に警告を発して処理を止める」というセキュリティゲートの構築です。
—
核心に迫る:図面データベースの読み取り
AutoCAD VBAにおいて、図面全体のプロパティは `ThisDrawing.SummaryInfo` から取得できます。しかし、教育版フラグのような深い情報は、`XRecord`(拡張レコード)やヘッダーのステータスに隠されています。
今回は、最も確実で軽量な手法である `SummaryInfo` の拡張フィールドをチェックするアプローチを紹介します。
実装コード:Educational Stamp Guard
以下のコードをVBAエディタ(Alt + F11)に貼り付けてください。
‘ ———————————————————
‘ 機能: 図面の教育版フラグをチェックし、警告を発する
‘ ———————————————————
Public Sub CheckEducationalStamp()
Dim doc As AcadDocument
Set doc = ThisDrawing
‘ プロパティ情報から作成元の情報を取得
Dim summaryInfo As AcadSummaryInfo
Set summaryInfo = doc.SummaryInfo
‘ ※注意: 教育版スタンプの情報はデータベースのフラグとして埋め込まれるため
‘ 単純なプロパティだけでなく、システム変数 ‘ACADVER’ 等と併用して判断する
‘ ここでは、実務で最も有効な「データベースの教育版フラグ」を検知するロジックを提示
If IsEducationalVersion(doc) Then
MsgBox “【警告】この図面は教育版で作成されています!” & vbCrLf & _
“誤った保存や印刷を行うとスタンプが刻印されます。処理を中断します。”, _
vbCritical, “セキュリティアラート”
‘ 必要に応じて、ここで図面を閉じる(保存させない)
‘ doc.Close False
Exit Sub
End If
MsgBox “図面は商用版として確認されました。作業を継続してください。”, vbInformation
End Sub
‘ データベースが教育版かどうかを判定する内部関数
Private Function IsEducationalVersion(doc As AcadDocument) As Boolean
‘ AutoCADのデータベースには教育版フラグが存在します
‘ GetVariableで “EDUGIF” などをチェックする手法もありますが、
‘ 現在のAPIではDatabaseオブジェクトの特性を利用します
On Error Resume Next
‘ 教育版の場合、特定のシステム変数が読み取り専用で強制される特性を利用
If doc.GetVariable(“EDUGIF”) = 1 Then
IsEducationalVersion = True
Else
IsEducationalVersion = False
End If
On Error GoTo 0
End Function
—
コードの解説:ここを理解すれば「脱・初心者」
1. `ThisDrawing` オブジェクトの活用:
これは開いている図面そのものを指す、VBAにおける最上位の入り口です。ここを起点にすべてのデータにアクセスします。
2. `GetVariable` の重要性:
AutoCADの内部状態(システム変数)を覗き見るための窓口です。`EDUGIF` という変数は、図面が教育版由来である場合に `1` を返します。これを知っているかどうかが、プロとアマの分かれ道です。
3. エラーハンドリング (`On Error Resume Next`):
環境によっては特定の変数が存在しない場合があります。エラーで止まるのではなく、例外をうまく制御して「安全側に倒す(教育版とみなす)」のが、業務自動化の鉄則です。
—
陥りやすい罠とアドバイス
- 「保存時」にチェックをかけるべき:
開く時だけでなく、`Class_Terminate` イベントや `Save` イベントをフックして、「保存しようとしたら警告が出る」ように改造することをお勧めします。これが真の「防御」です。
- 過信は禁物:
教育版スタンプのロジックはAutodesk側の仕様変更で変わる可能性があります。常に「このコードは検知の補助輪である」という認識を持ち、業務フローの中に「ダブルチェック」を組み込む姿勢を忘れないでください。
—
最後に:エンジニアとしてのマインドセット
プログラミングとは、単にコードを書くことではありません。「発生しうるリスクを先回りして潰し、同僚が安心して図面を扱える環境を作ること」です。
今回紹介した教育版の検知は、あなたのAutoCADライフを守る第一歩です。ここをクリアできれば、次は図面の「画層の統一」や「不要なブロックの自動パージ」など、さらに高度な自動化の世界が待っています。
何か詰まったら、いつでも戻ってきてください。私たちは常に、より良い自動化のためにここにいます。頑張ってくださいね!
