【入門編】【実務中級者向け】図面オープン時の「プロキシオブジェクト」警告ダイアログをシステム変数で抑制する – AutoCAD VBA解析バイブル

スポンサーリンク

自動化の敵「プロキシ警告」をねじ伏せる!AutoCAD VBAノンストップ運用の極意

こんにちは。AutoCADの自動化の世界へようこそ。
日々、膨大な図面を処理する自動化スクリプトを書いていると、必ずと言っていいほど直面する「最大の壁」があります。

それが「プロキシオブジェクトの警告ダイアログ」です。

他社製のアドオンソフトで作成された図面を開こうとした瞬間、画面中央に鎮座するあのダイアログ。あれが表示されると、どんなに完璧なVBAコードを書いていても、処理はそこで停止します。人間が「OK」ボタンを押さない限り、自動化は死んだも同然です。

今日は、この「自動化を阻む見えない壁」を、システム変数の制御によってスマートに破壊する方法を伝授します。ここをマスターすれば、あなたのマクロは「有人監視が必要なツール」から「深夜に仕事を終わらせてくれる真の自動化エンジン」へと進化します。

—

なぜ警告が出るのか?その本質を知る

そもそも「プロキシオブジェクト」とは何でしょうか?
簡単に言えば、「AutoCAD本体がその正体を知らない、外部ソフト独自の特殊なデータ」です。

AutoCADは親切心から「知らないデータがあるよ、壊れちゃうかもしれないけど開く?」と聞いてきます。しかし、我々エンジニアにとって、それは「余計なお世話」です。

このダイアログを止めるには、以下の2つのシステム変数を適切に操作する必要があります。

1. `PROXYNOTICE`: プロキシがあるときに警告を表示するかどうか(0:表示しない / 1:表示する)
2. `PROXYGRAPHICS`: プロキシの見た目を保存するかどうか(0:保存しない / 1:保存する)

—

現場で使える「最強の開閉コード」

それでは、実際にVBAでこの制御を組み込んでみましょう。
ポイントは、「処理が終わったら必ず元の設定に戻す」という、エンジニアとしての作法です。

Public Sub OpenDrawingNonStop(strFilePath As String)
Dim doc As AcadDocument
Dim oldProxyNotice As Integer

‘ 1. 現在のシステム変数を退避(環境を汚さないのが一流の証)
oldProxyNotice = ThisDrawing.GetVariable(“PROXYNOTICE”)

‘ 2. 警告をOFFにする
ThisDrawing.SetVariable “PROXYNOTICE”, 0

On Error Resume Next ‘ 万が一のオープンエラーに対する防波堤

‘ 3. 図面を開く
Set doc = Documents.Open(strFilePath)

‘ 4. エラーチェック
If Err.Number <> 0 Then
MsgBox “図面のオープンに失敗しました: ” & strFilePath
Else
‘ ここで図面に対する自動化処理を実行!
Debug.Print “開いた図面: ” & doc.Name
End If

‘ 5. 後始末(ここが重要!)
‘ 設定を元に戻すのを忘れると、他のユーザーに迷惑がかかります
ThisDrawing.SetVariable “PROXYNOTICE”, oldProxyNotice

On Error GoTo 0
End Sub

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

  • `GetVariable` と `SetVariable`:

AutoCADのシステム変数を読み書きする魔法のメソッドです。これらを使えば、UI上で操作できるほぼ全ての項目をコードから操れます。

  • 「退避と復元」の哲学:

初心者は「値を0にする」ことだけに集中しますが、プロは「終わった後に0から元に戻す」ことまで考えます。これを怠ると、あなたのスクリプトが終わった後、他の人が図面を開く際にも警告が出なくなってしまい、業務混乱の原因になります。

  • `On Error Resume Next`:

ファイルの破損やパスのミスなど、予測不能なトラブルでプログラム全体をクラッシュさせないための「安全装置」です。

—

陥りやすい罠:なぜか警告が出る場合

「コードを書いたのに、まだ警告が出る!」という時は、以下の可能性を疑ってください。

1. 図面を開く前に変数を変えているか?:
`Documents.Open` を実行する前に `PROXYNOTICE` を設定しなければ意味がありません。
2. 権限の問題:
読み取り専用のフォルダや、管理者権限が必要なファイルにアクセスしようとしていませんか?
3. DXFファイルの場合:
DXF形式の場合、AutoCADのバージョンによっては独自の挙動を示すことがあります。可能な限りDWG形式で運用するのが自動化の定石です。

—

次のステップへ

「プロキシ警告を消す」というのは、自動化エンジニアとしての第一歩です。
ここをクリアできたなら、次は「図面を開いた瞬間に自動で不要な画層を削除する」「特定の属性情報を抽出する」といった、より高度な操作へ進んでください。

AutoCAD VBAは、古い言語と言われることもあります。しかし、設計の現場においてこれほどまでに「かゆい所に手が届く」言語はありません。

あなたが書くその1行が、明日、誰かの残業を1時間減らすかもしれません。その気概を持って、ぜひコードを書き続けてください。

何か詰まったら、またいつでもここへ戻ってきてくださいね。応援しています!

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