【入門編】【実務中級者向け】外部参照(Xref)のロードをスキップして図面オープンを高速化するテクニック – AutoCAD VBA解析バイブル

スポンサーリンク

【脱・重い図面】AutoCAD VBAで外部参照(Xref)を無視して高速起動する禁断のテクニック

こんにちは。AutoCADの自動化の世界へようこそ。

現場で大規模なプロジェクトに関わっていると、「図面を開くだけでコーヒーが飲めるほど時間がかかる」という事態に直面しませんか? 特に、複数の外部参照(Xref)がリンクされた図面を開く際、AutoCADは律儀にそれら全てを読み込もうとします。

しかし、もしあなたが「特定の画層を整理したいだけ」「属性値を書き換えたいだけ」という目的であれば、重たい外部参照を読み込む必要はありません。

今日は、AutoCAD VBAを使って、外部参照を「未ロード(Unload)」の状態で開き、爆速で処理を行うためのプロフェッショナルなテクニックを伝授します。

—

なぜ「外部参照」がボトルネックになるのか?

AutoCADで図面を開く際、`Documents.Open` メソッドを使うのが一般的ですが、何も対策をしないとAutoCADはフルロードを試みます。

  • フルロードの弊害:
  • リンク先のファイルパスを一つずつ検索・検証するオーバーヘッド。
  • 大規模な図面がネストされている場合のメモリ消費量。
  • ネットワーク経由の図面の場合、サーバー負荷によるタイムアウトリスク。

これらを回避するのが、「システム変数 `XLOADCTL` と `VISRETAIN` の活用」、そして「データベースの直接操作」です。

—

爆速オープンを実現するVBAコード

今回は、特定の図面を指定して、外部参照を一切読み込まずにバックグラウンドに近い感覚で開くためのロジックを紹介します。

Sub OpenDrawingFast()
Dim dwgPath As String
dwgPath = “C:\Projects\LargeProject\MasterPlan.dwg”

‘ 1. システム変数の退避(元の設定を壊さないのがプロの流儀)
Dim oldXload As Integer
oldXload = ThisDrawing.GetVariable(“XLOADCTL”)

‘ 2. XLOADCTLを 2 に設定(外部参照をロードせず、デマンドロードを無効化)
‘ これにより、外部参照のリンクを維持しつつ、実体の読み込みをスキップできる
ThisDrawing.SetVariable “XLOADCTL”, 2

‘ 3. 図面を開く
‘ 可視状態で開くが、外部参照は読み込まれない
Dim doc As AcadDocument
Set doc = Application.Documents.Open(dwgPath)

‘ 4. 処理が終わったら元の設定に戻すのが鉄則
ThisDrawing.SetVariable “XLOADCTL”, oldXload

MsgBox “外部参照スキップで開きました!”, vbInformation
End Sub

コードの重要ポイント解説

  • `XLOADCTL` とは?:

外部参照のデマンドロードを制御する変数です。値を `2` にすることで、外部参照を「未ロード」状態で保持したまま図面を開くことができます。これにより、読み込み時間を劇的に短縮できます。

  • 環境の復元:

`SetVariable` を使う際は、必ず元の値を退避させましょう。これを怠ると、次から手動で図面を開くユーザーが混乱する原因になります。「来た時よりも美しく」が自動化の基本マナーです。

—

初学者が陥りやすい「罠」と対策

Q1. 「外部参照が読み込まれていないのに、保存して大丈夫?」

A: もちろんです。`XLOADCTL = 2` で開いている間、外部参照は「未ロード」と定義されているだけです。そのまま保存しても、参照先のリンク情報は消えません。次にフルロードで開けば、通常通り再読み込みされます。

Q2. 処理中にエラーで落ちたらどうする?

A: 上記のコードは単純化していますが、実務では `On Error GoTo` を必ず使いましょう。エラーハンドリングを怠ると、`XLOADCTL` が `2` のまま固定され、同僚から「図面が開けない!」と苦情が来ることになります。

Sub RobustOpen()
On Error GoTo Cleanup
‘ …(開く処理)…

Cleanup:
‘ 何があっても設定を戻す
ThisDrawing.SetVariable “XLOADCTL”, 0
If Err.Number <> 0 Then MsgBox “エラーが発生しました: ” & Err.Description
End Sub

—

次のステップ:さらなる高速化へ

もし、図面を開く必要すらなく、「ただ属性値を一括更新したいだけ」という場合は、`Documents.Open` すら使わない ObjectDBX という高度な技術があります。

ObjectDBXは、画面(GUI)を描画せずにメモリ上でDWGを直接解析するため、通常のオープンよりも数倍速く動作します。今回の「外部参照スキップ」をマスターしたら、次はぜひObjectDBXの世界へ踏み込んでみてください。

AutoCAD VBAは、単なる「操作の記録」ではありません。「図面というデータベースをいかに効率的に支配するか」という高度なエンジニアリングです。

まずはこのコードを、あなたの日常の「重たい図面」で試してみてください。その速さに、きっと驚くはずですよ。

それでは、素晴らしい自動化ライフを!

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