ネットワーク切断の恐怖を「自動化」で克服せよ:AutoCAD VBAによるローカル・リカバリ同期術
こんにちは。AutoCADの深淵を覗き込み、VBAで業務を自動化する楽しさを追求しているエンジニアです。
皆さんは、VPN経由でサーバー上の図面を編集している最中に「ネットワークが切断されました」という絶望的なメッセージを見たことはありませんか?保存しようとした瞬間の接続エラー……あの時の冷や汗は、エンジニアなら誰もが一度は経験する悪夢です。
今回は、そんな「不安定なインフラ」を「堅牢なシステム」に変えるための、プロフェッショナルな設計思想を共有します。単なるコードの紹介ではありません。AutoCADという巨大なアプリケーションのライフサイクルを制御する、一段上の領域へご案内しましょう。
—
1. なぜ「ネットワーク直書き」はリスクなのか?
AutoCADの`SaveAs`メソッドをサーバー上のパスに直接叩き込むのは、実は非常にリスキーです。ネットワークのパケットロスや瞬断が発生した際、AutoCADはファイルロックを保持したままフリーズしたり、最悪の場合、DWGファイルが破損(Corrupt)します。
私たちが目指すのは、「作業はローカルで高速に、保存はバックグラウンドで安全に」というアーキテクチャです。
解決のロジック
1. 判定: 現在のファイルパスがサーバー(LAN/WAN)か確認。
2. 逃避: 作業開始時、必要に応じてローカルのTempフォルダへ同期コピー。
3. 保護: `Document.SaveAs`をトリガーに、まずはローカルへ保存。
4. 同期: 成功後、非同期的にサーバーへ転送。
—
2. 実装のステップ:まずはここから
VBAでこれを行うには、`ThisDrawing` オブジェクトと `FileSystemObject (FSO)` を組み合わせます。
‘ 必要な参照設定: Microsoft Scripting Runtime
Option Explicit
Sub SecureSaveToLocal()
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
Dim doc As AcadDocument
Set doc = ThisDrawing
‘ ローカルの作業用ディレクトリ
Dim localPath As String
localPath = “C:\CAD_TempWork\” & doc.Name
‘ 1. ネットワークエラーを回避して、まずは手元に保存する
On Error GoTo ErrorHandler
doc.SaveAs localPath, acNative
‘ 2. ネットワークが正常ならサーバーへ同期(簡易版)
If IsNetworkAvailable(“\\Server\Project\Target.dwg”) Then
fso.CopyFile localPath, “\\Server\Project\Target.dwg”, True
MsgBox “サーバー同期完了!”, vbInformation
Else
MsgBox “ネットワーク未接続。ローカルに退避しました。”, vbCritical
End If
Exit Sub
ErrorHandler:
MsgBox “保存失敗: ” & Err.Description
End Sub
‘ ネットワークチェック用関数
Function IsNetworkAvailable(path As String) As Boolean
Dim fso As Object
Set fso = CreateObject(“Scripting.FileSystemObject”)
IsNetworkAvailable = fso.FolderExists(fso.GetParentFolderName(path))
End Function
—
3. プロが教える「陥りやすい罠」と対策
初学者が必ず躓くのが「オブジェクトの解放」と「タイミング」です。
- 罠1:ファイルロックの解除待ち
サーバーへコピーする際、AutoCADがまだファイルを掴んでいるとエラーになります。`DoEvents`を挟むか、ファイルアクセス権をチェックするロジックが必須です。
- 罠2:フルパスの操作ミス
`ThisDrawing.Path` が空の(未保存の)場合、エラーを吐きます。必ず `If ThisDrawing.Path = “” Then` で新規保存を促す処理を入れましょう。
- 罠3:パフォーマンス
巨大な図面を保存するたびに同期すると、画面が固まります。余裕があれば、`FileSystemObject`の代わりにWindows APIの `CopyFileEx` を使い、バックグラウンドコピーを実装するのが「伝説的エンジニア」への第一歩です。
—
4. 次のステップ:VBAからさらに先へ
このシステムを構築できれば、あなたはもう「マクロの記録」ボタンを押すだけのユーザーではありません。図面データのライフサイクルを制御する「アーキテクト」です。
次は、これを「イベント駆動型(`Class Module`での `AcadDocument_BeginSave` イベントの利用)」に拡張してみてください。ユーザーが意識せずとも、自動的にローカルへバックアップが走る仕組みを作れば、チーム全体の生産性と安全性が劇的に向上します。
最後に
「止まらないシステム」を作ることは、自分自身の心の平穏を守ることでもあります。AutoCAD VBAは、単なる自動化ツールではなく、あなたのエンジニアとしての哲学を具現化するキャンバスです。
今日のコードをコピー&ペーストするだけでなく、なぜこの処理が必要なのか、その「痛み」を想像してみてください。そうすれば、あなたのコードは必ず、誰かの救いになるはずです。
何か詰まったら、いつでも聞いてくださいね。一緒に最高峰の自動化環境を作り上げていきましょう!
