【AutoCAD VBA極意】OneDrive/SharePoint同期の「壁」を突破せよ!図面操作の競合回避テクニック
こんにちは。AutoCADの自動化という深淵に挑む皆さん、今日も設計作業の効率化、お疲れ様です。
自動化エンジニアとして長年現場を見てきましたが、最近特に相談が増えているのが「OneDriveやSharePoint上の図面を開こうとすると、たまに失敗する」「同期のタイミングでファイルがロックされている」というトラブルです。
これ、実はVBAのコードが悪いのではなく、「ローカル同期」という現代のクラウド環境特有の非同期処理が原因です。今日は、この「同期の壁」を乗り越え、実務で絶対に止まらない堅牢なAutoCAD VBAを書くための「プロの知見」を伝授します。
—
1. なぜ「クラウド上の図面」はエラーを吐くのか?
通常のローカルドライブと違い、OneDrive等に置かれた図面には「見えない番人」がいます。
- 同期中の一時ファイル: ファイルを保存・同期する際、OneDriveは裏で一時的に`.tmp`のようなファイルを生成します。この瞬間に`Documents.Open`を投げると、「ファイルが見つかりません」とAutoCADは悲鳴を上げます。
- 遅延ロック: 誰かが開いている、あるいはPCが同期処理を行っている最中は、OSレベルでファイルが「使用中」としてロックされます。
これを解決するには、「開けるまで待つ(リトライ)」という知性と、「ファイルの状態を正しく検知する」という冷静さが必要です。
—
2. 実践:競合を回避する「賢いオープン関数」
ただ `Documents.Open` を書くのではなく、ファイルの状態を確認しながらリトライする関数を自作しましょう。これが「自動化エンジニア」への第一歩です。
‘ ———————————————————
‘ クラウド同期を考慮した堅牢なファイルオープン関数
‘ ———————————————————
Public Function SafeOpenDrawing(filePath As String) As AcadDocument
Dim doc As AcadDocument
Dim retries As Integer
Dim maxRetries As Integer: maxRetries = 5 ‘ 最大5回まで待機
‘ ファイルが存在するか確認
If Dir(filePath) = “” Then
MsgBox “ファイルが見つかりません: ” & filePath, vbCritical
Exit Function
End If
retries = 0
Do While retries < maxRetries
On Error Resume Next
' 図面を開く
Set doc = Application.Documents.Open(filePath)
If Err.Number = 0 Then
' 成功したらループを抜ける
Set SafeOpenDrawing = doc
Exit Function
Else
' 失敗時は少し待機(クラウドの同期待ち)
Err.Clear
retries = retries + 1
Application.Wait (Now + TimeValue("0:00:03")) ' 3秒待機
End If
On Error GoTo 0
Loop
MsgBox "同期エラーによりファイルを開けませんでした。" & vbCrLf & "ネットワーク状態を確認してください。", vbExclamation
End Function
このコードの「本質的なポイント」
1. `On Error Resume Next` の使いどころ: ここでは「エラーを無視する」のではなく、「エラーが起きたことを検知して、再試行のトリガーにする」ために使っています。
2. `Application.Wait`: 闇雲にループを回すとPCがフリーズします。必ず「待ち時間」を挟み、OSの同期処理に猶予を与えてください。
—
3. 「バージョン互換」という罠:読み取り専用で開く勇気
クラウド環境では、複数のエンジニアが同時に図面を触る可能性があります。そんな時、無理やり書き込み権限で開こうとすると「読み取り専用」のダイアログが出て自動化が止まります。
「自動化プロセスなら、原則としてReadOnlyで開く」。これがトラブルを避ける鉄則です。
‘ 読み取り専用で安全に開くための修正
Set doc = Application.Documents.Open(filePath, True) ‘ 第二引数をTrueにする
こうすることで、ユーザーが手動で編集している最中でも、あなたのマクロはデータを抽出するために図面を開き、静かに仕事を終えることができます。
—
4. プロとしてのアドバイス:開発現場での心構え
ここまで理解できれば、あなたはもう初心者ではありません。最後に、現場で生き残るための「心構え」を一つ。
「自動化は、失敗することを前提に設計せよ」
ネットワークは切れるし、ファイルはロックされるし、OneDriveは突然同期を始めます。完璧なコードを書こうとするのではなく、「エラーが起きたときに、いかに優雅にリトライし、いかに正しくユーザーにログを残せるか」。
この視点を持つだけで、あなたの書くVBAの品質は劇的に向上します。
次のステップへ
今回のコードをベースに、`FileSystemObject`を使って「ファイルの更新日時」をチェックしたり、`Open`する前に「そのファイルが本当に使用中か?」を確認する関数を組み合わせてみてください。
「ここをクリアすれば、AutoCAD VBAの基本はバッチリ」です。
皆さんの自動化ライフが、より快適で創造的なものになることを心から応援しています。何か詰まったら、いつでもまた聞きに来てくださいね。
