AutoCAD VBAを掌握する極限の知見:外部DB連携による図面メタデータ自動統制
AutoCADのオートメーションにおいて、「図面ファイル」は単なるバイナリの塊ではない。それはプロジェクトの進捗、設計者の意図、そして企業の資産そのものだ。
多くの現場で散見される「ファイル名の命名規則が守られない」「最新版がどれか不明」といった問題は、ヒューマンエラーではなく「システムの未熟」が引き起こしている。今回は、AutoCAD VBAとSQL Serverを直結させ、図面のライフサイクルをデータベース側で完全に支配下に置くための、堅牢なアーキテクチャを伝授する。
—
1. なぜ「イベント駆動」でなければならないのか
プログラミング初心者ほど、手動で「更新ボタン」を押させるようなツールを作りたがる。これはNGだ。設計者は図面を描くのが仕事であり、管理のためにボタンを押すのは非効率の極みである。
AutoCADには、`AcadDocument`のイベントが用意されている。特に以下の3つをフックすることで、ユーザーの操作を介さずにメタデータを同期させる。
- `BeginSave`: 保存直前にDBへ書き込み、トランザクションの正当性を担保する。
- `BeginDocOpen`: 開いた瞬間にロックフラグを立て、同時編集を物理的に防ぐ。
- `EndSave`: 保存完了をトリガーに、後続のシステム(進捗通知など)を叩く。
—
2. 堅牢な設計:ADODBによる接続とエラーハンドリング
VBAからSQL Serverへ接続する場合、`ADODB`を使用する。ここで重要なのは「切断型」の意識だ。接続を開きっぱなしにするのは、AutoCADのパフォーマンスを著しく低下させる。
実装の肝
- 接続文字列の秘匿化: コードに直接書かず、レジストリやINIファイルから読み込む。
- トランザクション: データの不整合を防ぐため、必ずトランザクション内で処理する。
—
3. 実践コード:Class Moduleによるイベント管理
このコードは、`Class Module`(名前を `clsDocEvents` とする)に記述し、AutoCADの起動時にインスタンス化して監視を開始する。
‘ — clsDocEvents.cls —
Option Explicit
Public WithEvents AppDoc As AcadDocument
Private Sub AppDoc_BeginSave(ByVal FileName As String)
On Error GoTo ErrHandler
‘ データベースに図面情報を登録/更新する関数を呼び出す
‘ 引数として、フルパス、バージョン情報などを渡す
Call UpdateDrawingMetadata(FileName, AppDoc.GetVariable(“DWGPREFIX”) & AppDoc.Name)
Exit Sub
ErrHandler:
MsgBox “メタデータの同期に失敗しました: ” & Err.Description, vbCritical
End Sub
Private Sub UpdateDrawingMetadata(ByVal FileName As String, ByVal FullPath As String)
Dim conn As Object
Dim cmd As Object
Set conn = CreateObject(“ADODB.Connection”)
‘ SQL Serverへの接続設定
conn.ConnectionString = “Provider=SQLOLEDB;Data Source=YourServer;Initial Catalog=DBName;Integrated Security=SSPI;”
conn.Open
Set cmd = CreateObject(“ADODB.Command”)
Set cmd.ActiveConnection = conn
‘ ストアドプロシージャを呼び出し、図面情報を更新
cmd.CommandText = “usp_UpdateDrawingLog”
cmd.CommandType = 4 ‘ adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter(“@FileName”, 200, 1, 255, FileName)
cmd.Parameters.Append cmd.CreateParameter(“@Path”, 200, 1, 1024, FullPath)
cmd.Execute
conn.Close
Set cmd = Nothing
Set conn = Nothing
End Sub
—
4. プロフェッショナルが守るべき3つの鉄則
① ブロッキングを回避せよ
DBへのアクセスがネットワーク遅延などで重い場合、AutoCADのUIがフリーズする。本番環境では、DB書き込みを別プロセス(VB.NETで作成したCOMサーバーや、非同期の外部バッチ)に投げるのが理想だ。今回はVBA単体での紹介だが、規模が大きくなれば必ず非同期化を検討せよ。
② ファイルロックの検知
`BeginDocOpen`イベントでは、DB上のステータスを確認し、他者が編集中であれば`ThisDrawing.Close`を即座に呼び出す「強制排他制御」を実装すべきだ。「警告を出すだけ」では、設計者は無視して編集を強行する。システムとして拒絶する勇気が必要だ。
③ バージョン互換制御
AutoCADのバージョン(`ACADVER`システム変数)をDBに記録しておくことは、将来的な移行作業のコストを劇的に下げる。「どの図面が、どのバージョンで保存されたか」のログは、レガシー資産の棚卸しにおいて最強の武器になる。
—
最後に:エンジニアとしての矜持
ツールを作る目的は、単なる「自動化」ではない。「組織のワークフローをコードで強制すること」だ。
メタデータの管理が徹底されれば、図面検索のストレスは消滅し、設計者は本来の「創造的な業務」に集中できる。この仕組みを導入した瞬間から、あなたのチームは「図面を探す時間」を「図面を磨く時間」へと変換できるはずだ。
さあ、コードを書いて、設計現場の非効率を根絶せよ。
