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

スポンサーリンク

【AutoCAD VBA】プロキシ警告の呪縛を解く――ノンストップ自動化のための極限設計術

AutoCADの自動化において、最も忌むべき存在は何か。それはコードのバグではない。「画面の向こう側で静かに停止しているダイアログボックス」である。

特に、サードパーティ製アドオンで作成された図面を開く際、突如として出現する「プロキシ情報」の警告。これに自動化プロセスを阻害され、深夜のバッチ処理が朝まで止まっていた……そんな苦い経験はないだろうか。

今回は、この「プロキシの呪縛」をシステム変数の操作で完全に掌握し、堅牢かつノンストップな処理を実現するためのアーキテクチャを伝授する。

—

1. 警告の本質:なぜダイアログは表示されるのか

AutoCADは図面を開く際、そのファイル内に定義されているオブジェクトを検証する。作成元のアドオンソフトがない環境で図面を開くと、AutoCADは「このオブジェクトをどう扱えばいいのか?」という判断をユーザーに委ねるために警告を出す。

これを力技で消そうとして、`SendKeys`を使ってEnterキーを送りつけるようなコードを書いてはならない。それは「自動化」ではなく「ハッキング」に近い脆弱な実装だ。

我々が制御すべきは、システム変数「PROXYNOTICE」と「PROXYGRAPHICS」である。

—

2. 堅牢な実装のためのアーキテクチャ

システム変数の変更において最も重要なのは、「例外発生時の復旧(ロールバック)」である。自動化プロセスが途中でクラッシュした場合、システム変数が変更されたままになり、現場の作業者に多大な迷惑をかけることになる。

以下のコードは、`AutoCADApplication`のセッション単位で安全に設定を切り替えるためのプロダクション・レベルのテンプレートだ。

実装コード:ノンストップ・ファイルオープン・モジュール

Option Explicit

‘ 警告を抑制し、プロキシを完全に無視するための堅牢なオープン処理
Public Sub OpenDrawingSafely(ByVal filePath As String)
Dim originalProxyNotice As Integer
Dim originalProxyGraphics As Integer

‘ 現在の環境をバックアップ(エラー時復旧のため)
originalProxyNotice = ThisDrawing.GetVariable(“PROXYNOTICE”)
originalProxyGraphics = ThisDrawing.GetVariable(“PROXYGRAPHICS”)

On Error GoTo ErrorHandler

‘ 【重要】システム変数を一時的に書き換える
‘ PROXYNOTICE: 0にすることで警告ダイアログを抑制
‘ PROXYGRAPHICS: 1にすることでプロキシのグラフィックを表示(必要に応じて調整)
ThisDrawing.SetVariable “PROXYNOTICE”, 0
ThisDrawing.SetVariable “PROXYGRAPHICS”, 1

‘ 図面のオープン処理
Application.Documents.Open filePath

‘ 成功したら設定を戻す(本来はCloseイベントで戻す設計が理想)
GoTo Finally

ErrorHandler:
MsgBox “図面の読み込み中に致命的なエラーが発生しました: ” & Err.Description, vbCritical

Finally:
‘ どんな状況でも環境を元の状態に戻す
ThisDrawing.SetVariable “PROXYNOTICE”, originalProxyNotice
ThisDrawing.SetVariable “PROXYGRAPHICS”, originalProxyGraphics
End Sub

—

3. なぜこの設計が必要なのか(プロの視点)

グローバル状態の汚染を防ぐ

VBAはAutoCADのプロセス内で動作する共有リソースだ。システム変数を変更しっぱなしにすると、他のアドオンや手動操作に予期せぬ挙動を引き起こす。上記コードのように、必ず「バックアップ」と「復旧(Finallyブロック相当)」をセットにせよ。

ファイル・データベース連携時の罠

もしあなたが、データベースと連携して何百もの図面を連続処理するツールを作っているなら、「1ファイルごとのOpen/Close」を厳格に守ること。
`Documents.Open`を実行するたびにメモリは消費される。長時間稼働させるなら、定期的に `ActiveDocument.Close` を呼び出し、AutoCADのメモリを解放するライフサイクル設計が不可欠だ。

—

4. さらなる高みへ:運用上のアドバイス

  • PROXYGRAPHICSの選定:

もしプロキシオブジェクトの形状が重要なら `1` にするが、処理速度を最優先し、単なる変換や属性抽出が目的なら `0` に設定せよ。描画コストを省くことで、処理時間が20〜30%短縮されるケースも珍しくない。

  • エラーハンドリングの徹底:

`On Error Resume Next` を多用するプログラマが多いが、これは言語道断だ。何が起きたのかをログに残し、特定可能な状態にしておくこと。それが、大規模な自動化プロジェクトにおける「保守性」の正体である。

—

結論

AutoCADを自動化するとは、単にコマンドを叩くことではない。「AutoCADという不安定なプラットフォームの上に、いかにして安定した自律環境を構築するか」というエンジニアリングそのものである。

この「プロキシ警告抑制」の知見は、あなたの自動化ツールを「止まるツール」から「深夜に黙々と仕事をこなす信頼のパートナー」へと進化させるはずだ。

さあ、コードを書き換え、警告ダイアログに邪魔されない真の自動化を実現せよ。

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