【入門編】【上級プロフェッショナル向け】ネットワーク切断に備えた「ローカル一時保存」と自動リカバリ同期システム – AutoCAD VBA解析バイブル

スポンサーリンク

ネットワーク切断の恐怖を「自動化」で克服せよ: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は、単なる自動化ツールではなく、あなたのエンジニアとしての哲学を具現化するキャンバスです。

今日のコードをコピー&ペーストするだけでなく、なぜこの処理が必要なのか、その「痛み」を想像してみてください。そうすれば、あなたのコードは必ず、誰かの救いになるはずです。

何か詰まったら、いつでも聞いてくださいね。一緒に最高峰の自動化環境を作り上げていきましょう!

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