AutoCAD VBAを掌握する:SQL Server連携による「図面バージョン自動管理」の極意
こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの日常から卒業し、自らシステムを制御する側へ回りたいあなたへ。今日は、現場のエンジニアが最も頭を悩ませる「図面のバージョン管理」を、SQL Serverと連携させて自動化する、一歩先行くアーキテクチャを伝授します。
単に図面を開くのではなく、「DBが正しいと判断した最新版を、ローカルに強制同期してから開く」。この仕組みを理解すれば、あなたの図面管理は劇的に堅牢になります。
—
なぜ「バージョン管理」をコードに委ねるのか?
現場でよくある悲劇は「古い図面を修正してしまい、上書き保存してしまった」というミスです。これを防ぐのが「ゲートキーパー(門番)」としてのVBAです。
1. SQL Serverから最新のリビジョン情報を取得
2. ローカルのファイルとサーバー上のタイムスタンプを比較
3. 古ければ最新版をダウンロード(同期)
4. AutoCADでオープン
このフローを自動化することで、設計者は「どのファイルが最新か?」という悩みから解放されます。
—
実装の鍵:ADODBとAutoCAD Object Model
VBAからSQL Serverへ接続するには`ADODB`ライブラリを使います。また、AutoCADの制御には`AutoCAD Object Model`を駆使します。
1. SQL Serverから最新情報を引く
まずは、データベースから対象図面の「最新パス」を取得する関数です。
‘ 参照設定: Microsoft ActiveX Data Objects 6.x Library を追加してください
Public Function GetLatestDrawingPath(dwgID As String) As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim sql As String
Set conn = New ADODB.Connection
‘ 接続文字列(環境に合わせて変更)
conn.ConnectionString = “Provider=SQLOLEDB;Data Source=SERVER_NAME;Initial Catalog=DB_NAME;Integrated Security=SSPI;”
conn.Open
sql = “SELECT FilePath FROM Drawings WHERE DwgID = ‘” & dwgID & “‘ AND IsLatest = 1”
Set rs = conn.Execute(sql)
If Not rs.EOF Then
GetLatestDrawingPath = rs.Fields(“FilePath”).Value
End If
rs.Close: conn.Close
End Function
—
図面を開く:AutoCAD VBAの核心
図面を開く際、初心者が陥りがちなのが「既に開いている図面を無視して開こうとしてエラーになる」という罠です。ここで`Documents`コレクションを操作するスマートな書き方を覚えましょう。
Public Sub OpenDrawingManaged(dwgPath As String)
Dim doc As AcadDocument
‘ 既に開いているかチェック(重複オープンによるクラッシュを防ぐ)
For Each doc In Application.Documents
If UCase(doc.FullName) = UCase(dwgPath) Then
doc.Activate
Exit Sub
End If
Next
‘ ファイルが存在するか確認(基本中の基本ですが、これを怠るとAutoCADがフリーズします)
If Dir(dwgPath) <> “” Then
Set doc = Application.Documents.Open(dwgPath)
Else
MsgBox “図面ファイルが見つかりません。” & vbCrLf & dwgPath, vbCritical
End If
End Sub
—
プロフェッショナルのための「注意点」
1. 「オブジェクトの生存期間」を意識する
VBAで`Set`したオブジェクトは、プロシージャを抜けると消滅しますが、AutoCAD側のドキュメントオブジェクトは生き続けます。`Application.Documents`という「大きな箱」を常に意識し、今どのドキュメントを操作しているのかを見失わないようにしてください。
2. ネットワークドライブの同期問題
ネットワーク越しに直接図面を開くのは低速の原因です。「一度ローカルの一時フォルダにコピーしてから開く」という一工夫を加えるだけで、動作の安定性は劇的に向上します。
3. エラーハンドリングは「優しさ」
`On Error Resume Next`を多用してエラーを隠すのは悪手です。しっかりとした`Err.Number`のチェックを行い、ユーザーに「なぜ失敗したのか」を明確に伝えることが、伝説のエンジニアへの第一歩です。
—
さあ、次の一歩を踏み出そう
今回紹介したコードは、あくまで「骨組み」です。ここに「チェックアウト機能(排他制御)」や「ログ記録機能」を追加していけば、それは立派な業務基盤システムになります。
「マクロなんて…」と怯える必要はありません。AutoCADのAPIは、あなたが指示した通りに動く、非常に誠実な部下です。
今回クリアした「DB連携」と「ドキュメント制御」のロジック。これが身につけば、どんな複雑なワークフローも自動化可能です。次は、図面内のブロックを一括置換する…そんなタスクに挑戦してみませんか?
あなたのエンジニアリングライフが、より快適で創造的なものになりますように。応援しています!
