こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押すだけの自動化から一歩抜け出し、「真のAutoCADプログラミング」をマスターしたいあなたへ。
今回は、現場の実務でめちゃくちゃ役立つ【上級】AcadApplication.Preferences.Files.SupportPathの動的書き換えというテーマでお届けします。
「外部参照(Xref)やフォント、カスタムシェイプが見つからないというエラーに悩まされている…」
「プロジェクトごとに共有フォルダのパスを手動で追加・削除するのが面倒くさい…」
そんな悩みを一発で、しかもスマートかつ安全に解決するテクニックです。
ここをクリアすれば、あなたのAutoCAD VBAスキルは確実に一段上のステージへ到達します。さあ、一緒に本質を学んでいきましょう!
—
1. なぜ「サポートパスの動的書き換え」が必要なのか?
AutoCADには、フォント、線種、ハッチングパターン、そして外部参照などのファイルをどこから読み込むかを探すための「サポートファイル検索パス(SupportPath)」という設定があります。
通常、これらはAutoCADのオプション画面([オプション]ダイアログ > [ファイル]タブ)から手動で設定しますよね。
しかし、こんなシチュエーションはありませんか?
- 「今から処理する図面群は、特定のプロジェクトフォルダ内にある特殊なフォントや外部参照を読み込む必要がある」
- 「でも、作業が終わったら、余計なパスは汚染しないように綺麗に元に戻したい」
これを手動でやっていると、設定を戻し忘れて他の図面を開いたときに思わぬトラブルの原因になります。だからこそ、「VBAが起動した瞬間に必要なパスを追加し、処理が終わったら(あるいはエラーで止まったとしても)確実に元の状態へ復元する」という動的な環境制御が必要なのです。
—
2. オブジェクトモデルの構造を知る
まずは、この設定を操るための「住所(オブジェクト階層)」を確認しておきましょう。AutoCAD VBAのトップに君臨するのが `AcadApplication` です。
AcadApplication (AutoCAD本体)
┗ .Preferences (環境設定全体)
┗ .Files (ファイル関連の設定)
┗ .SupportPath (サポートパスの文字列:セミコロン区切り)
ここで重要なポイントがあります。
`SupportPath` は、個別のフォルダが配列として格納されているわけではなく、ひとつの巨大な「セミコロン(`;`)区切りの文字列」として保持されています。
つまり、パスを追加するには、以下の手順を踏む必要があります。
1. 現在の `SupportPath` の文字列をすべて変数にバックアップする。
2. 既存の文字列の末尾(または先頭)に、追加したいフォルダのパスをセミコロン区切りで結合する。
3. 書き換えた文字列を `SupportPath` に代入する。
4. 【最重要】処理が終了したら、必ず1番でバックアップした文字列に戻す。
—
3. 【実践】安全性を極めた動的書き換えコード
それでは、現場でそのままコピペして使える実用コードを公開します。
プログラミングの世界では「エラーが起きて途中でマクロが止まったら、パスが追加されたままになってしまった」というのが最悪のパターンです。これを防ぐために、エラーハンドリング(`On Error`)を必ず組み込みます。
Sub DynamicSupportPathControl()
‘ 変数の宣言
Dim acadApp As AcadApplication
Dim originalPath As String
Dim targetFolder As String
Dim addedPath As String
‘ 1. AutoCADアプリケーションオブジェクトの取得
Set acadApp = ThisDrawing.Application
‘ 2. 追加したいプロジェクト専用フォルダのパス(環境に合わせて変更してください)
targetFolder = “C:\MyProject\SharedResources”
‘ エラー時でも必ずパスを復元できるようにトラップを準備
On Error GoTo ErrorHandler
‘ 3. 現在のサポートパスを完全にバックアップ
originalPath = acadApp.Preferences.Files.SupportPath
‘ 4. 既にターゲットパスが含まれていないかチェック(重複追加を防ぐ知恵)
If InStr(1, originalPath, targetFolder, vbTextCompare) = 0 Then
‘ 既存のパスの末尾にセミコロンと新しいパスを結合
‘ ※AutoCADのパス区切りはセミコロン(;)です
addedPath = originalPath & “;” & targetFolder
‘ サポートパスを書き換え!
acadApp.Preferences.Files.SupportPath = addedPath
MsgBox “サポートパスに一時追加しました: ” & targetFolder, vbInformation, “環境制御”
Else
‘ 既に含まれている場合はバックアップのみ保持
addedPath = originalPath
End If
‘ ==========================================
‘ ここに、一時パスが必要な重い処理を記述します
‘ 例:外部参照のバインドや、特殊図面のバッチ処理など
‘ ==========================================
Call DoSomethingWithSpecialResources(ThisDrawing)
‘ 5. 正常終了時のクリーンアップ(元のパスへ復元)
acadApp.Preferences.Files.SupportPath = originalPath
MsgBox “サポートパスを元の状態に復元しました。”, vbInformation, “完了”
Exit Sub
ErrorHandler:
‘ 【超重要】予期せぬエラーでマクロが止まっても、ここで確実にパスを元に戻す!
acadApp.Preferences.Files.SupportPath = originalPath
MsgBox “エラーが発生したため、安全のためにサポートパスを元に戻しました。” & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “緊急復元”
End Sub
‘ ダミーの処理用プロシージャ
Sub DoSomethingWithSpecialResources(doc As AcadDocument)
‘ ここに実際の業務ロジックが入ります
Debug.Print “特殊リソースを使った処理を実行中…”
End Sub
—
4. コードのここがスゴい!プロの技を解説
このコードには、現場を知るエンジニアならではの「こだわり」が詰まっています。
① `On Error GoTo ErrorHandler` によるフェイルセーフ
もし処理の途中で図面エラーやゼロ除算などのVBAエラーが発生した場合、通常はそこでコードがストップし、AutoCADの環境が汚染されたままになります。
しかし、このコードではエラーが起きようとも必ず `ErrorHandler` ラベルへジャンプし、`originalPath`(元の設定)を強制上書きするため、AutoCADの環境を絶対に汚しません。
② 重複追加の防止 (`InStr` 関数)
すでにサポートパスに含まれているフォルダを何度も追加してしまうと、パスの文字列がどんどん肥大化し、最悪の場合はAutoCADの内部バッファや動作に悪影響を及ぼします。
`InStr` を使って「すでに含まれていないか?」をチェックしてから追加するスマートさが、プロのコードの証拠です。
—
5. 陥りやすい罠と注意点
最後に、この手法を使う上で絶対に知っておくべき注意点をシェアします。
- 権限の問題(UACなど)
追加するフォルダがあまりにもセキュリティの厳しい階層にある場合、AutoCAD自体がそのパスを弾くことがあります。社内の共有サーバーやローカルの作業用フォルダを指定するのが無難です。
- 反映のタイミング
`acadApp.Preferences.Files.SupportPath` に値を代入した瞬間から、AutoCADの検索エンジンはそのパスを認識します。したがって、「パスを追加したあとにファイルを開く・読み込む」という順序を守る必要があります。
—
まとめ
今回は、`AcadApplication.Preferences.Files.SupportPath` を使った環境の動的制御について解説しました。
- サポートパスは「セミコロン区切りの巨大な文字列」である。
- 変更する前には必ずバックアップを取り、処理後は必ず復元する。
- `On Error` を使って、例外時でも環境が元に戻る仕組み(フェイルセーフ)を必ず実装する。
ここをクリアできれば、単なるマクロの自動化を超えて、「AutoCADの環境そのものを自在にコントロールするアプリケーションエンジニア」としてのスキルが手に入ります。
ぜひ、実際の業務フォルダのパスに書き換えて試してみてください。あなたのVBAライフが、より安全で快適なものになることを応援しています!
