AutoCAD VBAの深淵:DWT自動生成による「標準化」の極意
AutoCADの運用において、最もコストを支払っているのは「図面を描く時間」ではない。「毎回、画層やスタイルを整える無駄な時間」と「担当者による設定のバラつきを修正する時間」である。
伝説的なエンジニアならば、個人のスキルに依存する手作業を、コードの一撃で「規律」へと昇華させる。今回は、AutoCAD VBAを駆使して、誰がいつ作っても完璧な図面環境を生成する「テンプレート自動生成エンジン」の設計思想を伝授する。
—
1. なぜ「SaveAs」の安易な使用が地雷なのか
初心者は `ThisDrawing.SaveAs` を呼んで終わらせるが、それはプロの仕事ではない。
AutoCADの `AcadDocument` オブジェクトには「ドキュメント固有の状態(Dirty状態)」がある。単に保存するだけでは、不要なオブジェクト(パージされていない残骸)や、直前の編集セッションのゴミがテンプレートに混入する可能性がある。
プロが守るべき3つの鉄則
1. クリーンな初期化: 新規作成したドキュメントは、まず不要な画層やブロックをパージする。
2. システム変数の強制固定: `CMDECHO` や `FILEDIA` などのシステム変数は、ツール実行前後で必ず退避・復元する。
3. パスの正規化: ファイルシステムとの対話は常にフルパスで行う。相対パスへの依存は、ネットワークドライブ環境下で即座に崩壊する。
—
2. DWT自動生成のプロダクションコード
以下のコードは、単なる保存ではなく「標準化された環境を構築する」ための堅牢な実装だ。
Option Explicit
‘ ———————————————————
‘ テンプレート生成メインルーチン
‘ ———————————————————
Public Sub GenerateStandardTemplate()
Dim newDoc As AcadDocument
Dim templatePath As String
‘ 保存先のフルパス(環境に合わせて変更)
templatePath = “C:\CAD_Standards\Company_Standard.dwt”
‘ エラーハンドリングの徹底
On Error GoTo ErrorHandler
‘ 1. 新規ドキュメントの作成(acad.dwtをベースに)
Set newDoc = Application.Documents.Add(“acad.dwt”)
‘ 2. 標準設定を適用する関数を呼び出す
Call ApplyCompanyStandards(newDoc)
‘ 3. 既存のDWTを上書きするためのフラグ処理
‘ SaveAsメソッドは第2引数でフォーマットを指定可能
‘ acTemplate はDWT形式を明示する
newDoc.SaveAs templatePath, acTemplate
MsgBox “テンプレートの生成が完了しました。”, vbInformation
Exit Sub
ErrorHandler:
MsgBox “エラー発生: ” & Err.Description, vbCritical
End Sub
‘ ———————————————————
‘ 標準環境を構築するサブルーチン(保守性を高める分離)
‘ ———————————————————
Private Sub ApplyCompanyStandards(doc As AcadDocument)
Dim layerObj As AcadLayer
‘ 例:標準画層「01_寸法線」の作成
Set layerObj = doc.Layers.Add(“01_寸法線”)
layerObj.Color = acRed
‘ 例:システム変数の強制適用
doc.SetVariable “DIMSTYLE”, “Standard”
doc.SetVariable “LUNITS”, 2 ‘ 小数点表示
‘ ここに寸法スタイル(AcadDimStyle)や文字スタイル(AcadTextStyle)の設定を追加
End Sub
—
3. なぜこの設計が「最強」なのか
疎結合なモジュール構造
`ApplyCompanyStandards` を分離しているのは、将来的に「プロジェクト別のテンプレートが必要になった際」に、メインのロジックを一切触らずに設定関数だけを差し替えられるようにするためだ。これがメンテナンスコストを最小化する秘訣である。
ファイル・データベース連携の注意点
実務では、このテンプレートに「プロジェクト番号」や「担当者」をメタデータとして埋め込む必要があるだろう。
- XRecordの活用: 図面プロパティに直接書き込むのではなく、`Dictionary` オブジェクトを `NamedObjectDictionary` に保存せよ。これにより、外部システム(Excelの管理台帳など)から図面を開かずに情報を抽出できる。
- FileLockの回避: ネットワークドライブで生成する場合、`Dir()`関数でファイルの存在を確認し、排他制御を考慮すること。
—
4. 自動化の先にある未来
ここまで読んで、「これを作る意味はあるのか?」と自問したかもしれない。答えは明白だ。「人間が手でテンプレートを直す」という行為は、組織にとって負債でしかない。
あなたが構築すべきは、単なる「DWT作成ツール」ではない。標準化という名の「ルール」を、誰もが抗えないコードという形で配布する環境そのものだ。
AutoCAD VBAは古臭いと言われるが、そのオブジェクトモデルは極めて強力で、かつ直接的にCADの深部にアクセスできる。この「力」をどう使うか。すべては、あなたの設計思想にかかっている。
さあ、エディタを開け。君のコードで設計現場の「バラつき」を過去のものにしてやろう。
