AutoCAD VBAの「扉」を正しく開く:読み取り専用と通常モードの境界線
こんにちは。AutoCADの自動化という深淵な世界へ足を踏み入れた皆さん、ようこそ。
マクロの記録という「杖」を頼りに歩んできた皆さんが、自分の意思でAutoCADを操る「魔法使い」へと進化する時が来ました。今回取り上げるのは、多くの初心者が無意識に通り過ぎ、そして必ず一度は痛い目を見る「図面を開く際のモード選択(ReadOnly)」という極めて重要なテーマです。
「ただファイルを開くだけでしょ?」と侮るなかれ。ここには、AutoCADという巨大なアプリケーションと、ファイルシステムという現実の境界線で起きる「事故」を未然に防ぐための、プロフェッショナルの知恵が詰まっています。
—
1. なぜ「読み取り専用」という選択肢があるのか?
AutoCADで図面を開く際、VBAの `Open` メソッドには `ReadOnly` という引数が存在します。
- ReadOnly := True(読み取り専用):
図面の内容を「見る」だけ。書き込み権限を持たないので、誰かが同じ図面を編集している最中でも安全にアクセスできます。
- ReadOnly := False(通常モード):
図面の内容を「変える」権利を持つ。ファイルを独占的に開くため、他の誰かがその図面を編集することはできません。
現場の判断基準:
- 「データを抽出するだけ」なら絶対にReadOnlyを選べ。 これを守るだけで、他の設計者が「書き込みロック」に阻まれて作業できないというトラブルを100%防げます。
- 「図面に変更を加える」時だけ通常モードを使う。 「念のため」という甘えは、図面破壊の温床です。
—
2. 実装:プロの「オープン戦略」コード
それでは、現場で即戦力となるコードを見ていきましょう。ただ開くのではなく、「もし既に開かれていたらどうするか?」という点までケアするのが、一流の第一歩です。
Sub OpenDrawingExample()
Dim dwgName As String
Dim doc As AcadDocument
‘ 対象ファイルのフルパスを指定
dwgName = “C:\Projects\Design_001.dwg”
‘ 読み取り専用で開くか、編集用に開くかのフラグ
‘ ツール作成時は、引数を変数にして切り替え可能にするのが定石
Dim isReadOnly As Boolean
isReadOnly = True
‘ エラーハンドリングを追加(ファイルが見つからない等の事故を防ぐ)
On Error Resume Next
‘ 図面を開くメイン処理
‘ ReadOnly引数を明確に指定することが重要
Set doc = Application.Documents.Open(dwgName, isReadOnly)
If Err.Number <> 0 Then
MsgBox “図面のオープンに失敗しました。” & vbCrLf & “原因: ” & Err.Description
Exit Sub
End If
‘ 成功したことをユーザーに通知
If isReadOnly Then
MsgBox “読み取り専用モードで開きました。データ抽出用です。”
Else
MsgBox “編集モードで開きました。変更を保存できます。”
End If
On Error GoTo 0
End Sub
コードのここがポイント!
1. `On Error Resume Next`: ファイルがパス上に存在しない場合、AutoCADは容赦なくエラーを出して止まります。これを防ぐための「安全装置」です。
2. 引数の明示: `Open`メソッドの第2引数に `isReadOnly` を渡すことで、プログラムの意図を明確にしています。
3. ユーザーへのフィードバック: プログラムが勝手に動くのではなく、今どういう状態で開いているかをメッセージボックスで示す。これが「親切なツール」の条件です。
—
3. 陥りやすいエラーと罠
初心者が必ず一度は踏む地雷があります。それは「図面を閉じる時の挙動」です。
通常モード(ReadOnly:=False)で開き、何も変更を加えなかったとしても、AutoCADは「図面が開かれた」という事実だけで、閉じるときに「保存しますか?」と聞いてくることがあります。
【解決策】
もし、単に情報を読み取っただけで図面を閉じる場合は、以下のように記述してください。
‘ 変更を加えずに強制的に閉じる
doc.Close SaveChanges:=False
`SaveChanges:=False` を指定することで、余計な「保存の確認ダイアログ」を回避し、マクロを完全にバックグラウンドで完結させることができます。
—
4. 先輩からのメッセージ
AutoCAD VBAをマスターするコツは、「自分のコードが、図面ファイルという『公共の財産』にどう影響を与えるか」を想像することです。
- 読み取るだけのときは、遠慮なく「読み取り専用」で。
- 書き込むときは、責任を持って「通常モード」で。
この使い分けができるようになれば、あなたのツールは他のエンジニアからも信頼される「頼れる仕事道具」になります。
ここをクリアしたあなたは、もう初心者ではありません。次のステップは、複数の図面を高速で一括処理するループ処理ですね。それはまた別の機会に。まずは今日書いたコードで、手元の図面を安全に開いてみてください。
あなたの自動化ライフが、より快適で創造的なものになりますように!
