【入門編】【上級】AcadDocumentのEndCommandイベントを利用し、特定の操作後に図面情報をSQL Serverへ即時同期 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCADとデータベースの「リアルタイム同期」:EndCommandイベントによるBIM/CIMへの第一歩

こんにちは。AutoCADの自動化の世界へようこそ。
これまで「マクロの記録」ボタンを押しては、生成されたコードの解読に頭を抱えていたあなたへ。今日は、その一歩先、「AutoCADを単なる作図ソフトから、生きたデータプラットフォームへ昇華させる」ための魔法をお教えします。

今回目指すのは、ユーザーがMOVEやSTRETCHを終えた瞬間、その変更内容をSQL Serverへ自動送信する「リアルタイム同期」システムの構築です。

1. なぜ「EndCommand」なのか?

AutoCAD VBAには多くのイベントがありますが、中でも`EndCommand`は極めて強力です。
ユーザーがコマンドを終了した瞬間(例:MOVEコマンドで移動先をクリックして確定した瞬間)に割り込むことができるからです。

「Save」イベントで保存時に全データを吐き出すのは簡単ですが、それでは「いつ、誰が、何を動かしたか」というBIM/CIM的な履歴管理はできません。`EndCommand`を制する者は、AutoCADのワークフローを完全に制御できます。

2. 準備:クラスモジュールによる「イベント監視」の作法

AutoCAD VBAでイベントを使うには、標準モジュールではなくクラスモジュールが必要です。ここで躓く人が多いのですが、考え方はシンプルです。

1. クラスモジュールを新規作成し、名前を `EventMonitor` に変更します。
2. 以下のコードを記述します。

‘ クラスモジュール: EventMonitor
Public WithEvents AppEvents As AcadApplication

‘ どのコマンドが終わったのかを検知する
Private Sub AppEvents_EndCommand(ByVal CommandName As String)
‘ 対象とするコマンドをフィルタリング(MOVEやSTRETCHなど)
Select Case UCase(CommandName)
Case “MOVE”, “STRETCH”, “ROTATE”
Debug.Print CommandName & ” が完了しました。DB同期を開始します…”
Call SyncToSQLServer(CommandName)
End Select
End Sub

【重要】なぜWithEventsを使うのか?

`WithEvents`は、AutoCADという巨大なオブジェクトの「耳」を立てるようなものです。これを使わないと、AutoCADが「今、何を終えたか」をプログラムが知る術はありません。

3. 実装の心臓部:SQL Serverへの送信処理

次に、標準モジュールに同期用のロジックを書きます。ここではADO(ActiveX Data Objects)を使用してSQL Serverへ接続します。

‘ 標準モジュール: SyncModule
Public Sub SyncToSQLServer(cmdName As String)
Dim conn As Object
Set conn = CreateObject(“ADODB.Connection”)

‘ SQL Serverへの接続文字列(環境に合わせて変更してください)
Dim connStr As String
connStr = “Provider=SQLOLEDB;Data Source=YOUR_SERVER;Initial Catalog=CAD_DB;Integrated Security=SSPI;”

On Error Resume Next
conn.Open connStr

‘ ここで選択セット(SelectionSet)等を使って変更された図形情報を抽出する
‘ 簡易的なSQL送信例
Dim sql As String
sql = “INSERT INTO AuditLog (Command, ExecTime) VALUES (‘” & cmdName & “‘, GETDATE())”

conn.Execute sql
conn.Close

MsgBox “データベース同期完了:” & cmdName
End Sub

4. 現場で陥りやすい「3つの落とし穴」

このシステムを導入する際、必ず以下の点に注意してください。

  • イベントの二重起動: コマンド操作中に別のコマンドが入れ子になった場合、予期せぬ動作をすることがあります。`EnableEvents`プロパティを適切に制御しましょう。
  • 同期の重さ: SQL Serverへの接続はネットワークを介します。メインの作図作業を止めてしまわないよう、通信は「非同期」または「最小限のデータ量」に留めるのがプロの鉄則です。
  • エラーハンドリング: ネットワークが切れた瞬間にAutoCADがフリーズしないよう、`On Error Resume Next`を適切に活用し、失敗時はログファイルに残す設計にしましょう。

5. まとめ:ここをクリアすれば、あなたは「エンジニア」です

ここまで理解できたあなたは、単なる「CADオペレーター」ではありません。「図面データという資産を管理するインフラエンジニア」の入り口に立っています。

今回の構成をベースに、次は「変更されたオブジェクトの座標(X,Y,Z)を抽出してDBに送る」という機能を追加してみてください。それができれば、あなたの図面はただの絵から、情報を持った「デジタル資産」へと進化します。

AutoCAD VBAは古くからある技術ですが、その可能性は無限大です。
まずはこの`EndCommand`を実装し、コンソールに「同期完了」の文字が出た瞬間の喜びを味わってください。

もし、さらに深い「オブジェクトの座標抽出の効率化」や「VB.NETへの移行」について興味があれば、いつでも聞いてくださいね。応援しています!

タイトルとURLをコピーしました