こんにちは、現場の最前線でCAD自動化の設計を指揮しているチーフアーキテクトです。
AutoCAD VBAの世界へようこそ。マクロの記録を卒業し、自分の手でコードを書き始めたあなたは、今まさに「作業の自動化」という魔法の杖を手にしようとしています。
今日、私たちが向き合うのは「図面を読み取り専用で開く」という、地味ながらも極めて重要なテーマです。
「ただ開くだけなら簡単じゃないか」と思うかもしれません。しかし、プロの現場では「誤って上書きしてしまった」という一つのミスが、数日分の成果を台無しにすることもあります。データを守り、確実に情報を参照するための「安全な開き方」を、本質から紐解いていきましょう。
—
なぜ「読み取り専用」にこだわるのか?
大規模なプロジェクトになればなるほど、図面は自分一人のものではなくなります。
自動化プログラムの中で「座標値を取得するだけ」「部品表を書き出すだけ」といった参照作業を行う際、標準設定のまま図面を開いてしまうと、意図せず保存ボタンを押した瞬間にマスターデータが更新されてしまいます。
「読み取り専用(Read-Only)」で開くことは、データの防波堤を築くこと。
この基本をマスターすれば、あなたのプログラムの信頼性は一気に跳ね上がります。
—
AutoCAD VBAで図面を開く基本構造
AutoCAD VBAで新しい図面を開くには、`Documents` コレクションの `Open` メソッドを使用します。このメソッドの「2番目の引数」が、今回の主役です。
Openメソッドの仕様
Set 戻り値(Documentオブジェクト) = Documents.Open(ファイルパス, [読み取り専用フラグ], [パスワード])
- 第1引数: 開きたいDWGファイルのフルパス
- 第2引数: `True` にすると「読み取り専用」、`False`(または省略)だと「通常モード」
—
実践コード:安全に図面をオープンする
では、具体的かつ実用的なコードを見ていきましょう。ただ開くだけでなく、「ファイルが存在するか」を事前にチェックするプロの作法を盛り込んでいます。
Sub OpenDrawingReadOnly()
Dim dwgPath As String
Dim docObj As AcadDocument
‘ 1. 開きたい図面のフルパスを指定
‘ ※ご自身の環境に合わせて書き換えてください
dwgPath = “C:\Projects\Standard_Detail.dwg”
‘ 2. ファイルの存在チェック(プロの定石)
‘ ファイルがないのに開こうとすると、VBAはエラーで止まってしまいます
If Dir(dwgPath) = “” Then
MsgBox “指定されたファイルが見つかりません:” & vbCrLf & dwgPath, vbCritical
Exit Sub
End If
On Error Resume Next ‘ 万が一の展開エラーに備える
‘ 3. 読み取り専用でオープン
‘ 第2引数を「True」に設定するのが最大のポイントです
Set docObj = ThisDrawing.Application.Documents.Open(dwgPath, True)
‘ 4. 成功判定
If Err.Number <> 0 Then
MsgBox “図面を開く際にエラーが発生しました。”, vbExclamation
Else
MsgBox “図面を「読み取り専用」で安全に開きました!” & vbCrLf & _
“図面名: ” & docObj.Name, vbInformation
End If
On Error GoTo 0 ‘ エラーハンドリングを元に戻す
End Sub
—
ここをクリアすれば基本はバッチリ!3つの重要ポイント
このコードを使いこなすために、初心者が陥りやすいポイントを整理しておきましょう。
① `True` の魔法を忘れない
`Documents.Open(dwgPath, True)`。この `True` こそが、「君は見るだけでいいよ、書き換えはさせないよ」というプログラムへの命令です。ここを省略すると、AutoCADは気を利かせて(?)通常モードで開いてしまいます。
② すでに開いている場合はどうなる?
もし指定した図面が既にAutoCADで開かれていた場合、このコードを実行すると「読み取り専用として開き直す」か、あるいは既に開いているドキュメントをそのまま参照します。多重に開いて混乱するのを防ぐためにも、本来は「既に開いているかチェックするロジック」を組み合わせるのが理想ですが、まずはこの基本形を覚えれば十分です。
③ 「読み取り専用」でも変更はできてしまう?
ここが面白い(そして注意すべき)点ですが、読み取り専用で開いても、VBAで図形を描いたり設定を変えたりすること自体は可能です。
ただし、「上書き保存(Save)」ができなくなるだけです。
「読み取り専用だから何をしても安心」ではなく、「最後に上書き保存されないからマスターデータが守られる」という理解が正確です。
—
伝説のチーフアーキテクトからのアドバイス:`Saved` プロパティの活用
一歩先を行くあなたへ、特別な知見を授けます。
読み取り専用で開いた図面を閉じる際、AutoCADが「変更を保存しますか?」と聞いてくることがあります。これは、たとえ読み取り専用であっても、プログラムが図面を触ったことで「図面が汚れた(Dirty)」と認識されるからです。
これをスマートに回避するには、閉じる直前に以下の1行を足してください。
docObj.Saved = True ‘ 「この図面は保存済みですよ」と嘘をついてAutoCADを騙す
docObj.Close
この `Saved = True` は、「保存作業をする」のではなく「保存されたことにする」というフラグ操作です。これにより、ユーザーに余計なダイアログを見せることなく、静かに、そして美しく処理を終えることができます。
—
まとめ
「読み取り専用で開く」という行為は、単なる操作ではなく、「大切なデータを守る」という設計思想の現れです。
1. `Open` メソッドの第2引数を `True` にする。
2. `Dir` 関数でファイルの存在を確認する。
3. `Saved = True` でスマートに閉じる。
この3点をセットで覚えれば、あなたのAutoCAD VBAは「ただ動くマクロ」から「実務に耐えうる堅牢なツール」へと進化します。
一歩ずつ、確実に。この基本をマスターしたあなたなら、次はより複雑なバッチ処理や自動製図の世界も、きっと自由に飛び回れるはずですよ。応援しています!
