AutoCAD VBAの「呪い」を解く:共有ファイルをロックせずにスマートに読み込む極意
こんにちは。AutoCADの自動化という荒野を突き進むエンジニアの皆さん。
「集計用のマクロを動かしたら、同僚から『図面が開けないぞ!』と怒られた」。そんな経験はありませんか?
AutoCAD VBAにおいて、ファイルを「普通に」開くことは、実は最も避けるべきリスクの一つです。なぜなら、デフォルトのオープン命令は、その図面に「書き込み権限」を要求してしまうからです。
今回は、チーム開発の現場で「空気を読める」ツールを作るための、「読み取り専用(ReadOnly)オープン」の極意を伝授します。
—
なぜ「読み取り専用」が重要なのか?
AutoCADでファイルを開くと、フォルダ内に `.dwl` や `.dwl2` といった謎の隠しファイルが生成されるのを見たことはありませんか? これがいわゆる「ロックファイル」です。
誰かが図面を開いている間、このファイルが存在することで、他のユーザーは「書き込み」ができません。バッチ処理で100枚の図面を順番に開くようなプログラムを書いたとき、すべてを通常モードで開いてしまうと、あなたは社内のインフラを一時的に破壊するテロリストになりかねないのです。
「読み取り専用」で開くことは、単なるマナーではありません。業務を停滞させないためのエンジニアの矜持です。
—
実践:ReadOnlyオープンのコード実装
`Documents.Open` メソッドには、実は強力な引数が隠されています。これを使うだけで、あなたは他人の編集を邪魔することなく、安全にデータを抽出できるようになります。
Sub OpenDrawingReadOnly()
Dim doc As AcadDocument
Dim filePath As String
‘ 対象ファイルのパスを指定
filePath = “C:\Projects\SampleDrawing.dwg”
‘ エラーハンドリングはエンジニアの基本
On Error Resume Next
‘ ここが核心です!
‘ 第2引数の [ReadOnly] を True に設定します。
‘ これにより、他人の編集権限を奪わずに開くことができます。
Set doc = Application.Documents.Open(filePath, True)
If Err.Number <> 0 Then
MsgBox “ファイルのオープンに失敗しました:” & Err.Description
Exit Sub
End If
On Error GoTo 0
‘ — ここに図面から情報を抜き出す処理を書く —
Debug.Print “現在開いている図面名: ” & doc.Name
‘ 処理が終わったら必ず閉じる(保存確認は出さないのが鉄則)
doc.Close (False)
MsgBox “処理が完了しました。誰も邪魔していませんよ。”
End Sub
コードの重要ポイントを解説
1. `Application.Documents.Open(filePath, True)`
- この `True` がすべてです。これだけでAutoCADは「このユーザーは編集しない」と判断し、排他制御をかけずにファイルを開きます。
2. `doc.Close (False)`
- 読み取り専用で開いた場合でも、閉じる際に `False` を指定して「変更を保存しない」と明示的に伝えることが重要です。万が一の誤操作による上書き保存を防ぎます。
3. `On Error Resume Next` の活用
- ファイルが既に誰かに「強制的に」ロックされている場合や、パスが間違っている場合、プログラムがクラッシュしないようにガードをかけます。
—
陥りやすい罠と対策
1. 処理終了後の「閉じ忘れ」
VBAで図面を開きっぱなしにすると、AutoCADのメモリを激しく消費します。`For Each` ループなどで大量の図面を処理する場合、必ず各処理の最後で `Close` を呼ぶようにしてください。さもないと、AutoCADが重くなり、最終的にはフリーズします。
2. 「読み取り専用」なのに書き込もうとする
当然ですが、`ReadOnly = True` で開いた後に `Save` メソッドを呼ぶとエラーになります。データを修正したい場合は、開くモードを切り替えるか、別の名前で保存するロジックを組む必要があります。
3. 表示の高速化
バッチ処理中、いちいち画面がチラつくのが鬱陶しい場合は、以下の設定を組み合わせるとよりスマートです。
‘ 画面更新を止めて高速化
Application.Visible = False ‘ あるいは開く前に画面出力を制御
※ただし、`Visible = False` はAutoCADのセッション全体に影響するため、初心者の方はまずは「画面のチラつき」を我慢して、`ReadOnly` の挙動を完璧にマスターすることから始めましょう。
—
まとめ:エンジニアとしての一歩先へ
「マクロの記録」から卒業した皆さんが次に目指すべきは、「誰にも迷惑をかけない堅牢なツール」です。
今回紹介した `ReadOnly` オープンは、AutoCAD自動化の第一歩にして、最も頻繁に使う「礼儀作法」です。これをマスターすれば、あなたは周囲から「あの人のツールは安心して使える」と信頼されるエンジニアになれるはずです。
さあ、恐れずに開発を続けてください。何かあれば、またこの場所で会いましょう。あなたのコードが、現場の業務を劇的に軽くすることを応援しています。
