【入門編】【上級】AcadApplication.Preferences.Files.SupportPathの動的制御:プロジェクトごとに異なる「フォント・ハッチングパス」を自動で追加・優先順位付けする – AutoCAD VBA解析バイブル

スポンサーリンク

こんにちは!AutoCADの自動化の世界へようこそ。
マクロの記録ボタンを押すだけのステージはもう卒業して、これからはAutoCADの心臓部である「オブジェクトモデル」を自在に操るエンジニアになりましょう。

今回は、実務の現場で必ずといっていいほど直面する「文字化け」や「ハッチングの消失」という永遠の課題を、VBAの力でスマートに解決する極意を伝授します。

ここをクリアすれば、AutoCAD VBAの基礎と、環境設定をプログラムから支配する快感が一気に手に入りますよ。それでは、一緒に深掘りしていきましょう!

なぜ、あの図面を開くと「文字化け」や「ハッチング消失」が起きるのか?

皆さんは、別の部署や協力会社から送られてきた図面を開いた際、こんな絶望的な状況に出くわしたことはありませんか?

  • 「あれ? 図面内の文字が『?』だらけになっている……」
  • 「指定されたはずのカスタムハッチングパターンが消えて、ただの無地になっている……」

原因は単純です。あなたのAutoCADが、その図面専用の「フォント(SHX/TTF)」や「ハッチングパターン(PAT)」のありか(検索パス)を知らないからです。

通常であれば、AutoCADの「オプション」画面を開き、「ファイル」タブの「サポートファイル検索パス」に手動でフォルダを追加し、さらに「上へ」ボタンを押して優先順位を上げなければなりません。

……プロジェクトが何十個もある現場で、これを毎回手動でやりますか?
エンジニアなら、図面を開いた瞬間に自動でやってしまいましょう。

AutoCAD VBAの心臓部:`AcadApplication` と `Preferences`

AutoCAD VBAの世界では、CADアプリケーションそのものを表す `AcadApplication` という巨大な親玉が存在します。この親玉が持つ `Preferences` プロパティを使うと、AutoCADの「オプション」画面で行う設定のほぼ全てをコードから書き換えることができます。

今回ターゲットにするのは、以下の経路です。

AcadApplication
┗ .Preferences (環境設定)
┗ .Files (ファイルタブの設定)
┗ .SupportPath (サポートファイル検索パス)

この `SupportPath` は、実はただの「文字列」です。複数のパスがセミコロン(`;`)で区切られて並んでいる、ただそれだけの構造をしています。

つまり、VBAを使って「既存のパス文字列から、自プロジェクト用のパスを華麗に抽出し、一番先頭(最優先)に差し込んで再設定する」ことができれば、環境の動的制御が完全達成できるというわけです。

【実践】プロジェクト専用パスを最優先で追加するVBAコード

それでは、開発の現場でそのままコピー&ペーストして使える実用コードを公開します。
このコードは、現在アクティブな図面が保存されているフォルダ、あるいは特定のプロジェクトフォルダを自動検出し、検索パスの先頭にねじ込む魔法のルーチンです。

Sub SetProjectSupportPath()
On Error GoTo ErrorHandler

Dim acadPref As AcadPreferences
Dim currentPath As String
Dim targetPath As String
Dim newPath As String
Dim pathArray() As String
Dim i As Long
Dim isAlreadyExists As Boolean

‘ 1. 追加したいプロジェクト専用のパスを指定(例として固定パス、または図面と同じフォルダを指定)
‘ ※実際の現場では、ActiveDocument.Path から動的に取得すると非常にスマートです。
If ActiveDocument.Path = “” {
MsgBox “図面が一度も保存されていません。一度保存してから実行してください。”, vbExclamation
Exit Sub
}
targetPath = ActiveDocument.Path & “\Project_A_Resources”

‘ フォルダが存在するか簡易チェック(FileSystemObjectを使うとより堅牢ですが今回は簡略化)
If Dir(targetPath, vbDirectory) = “” {
MsgBox “指定されたプロジェクトリソースフォルダが見つかりません:” & vbCrLf & targetPath, vbCritical
Exit Sub
}

‘ 2. AutoCADの環境設定オブジェクトを取得
Set acadPref = ThisDrawing.Application.Preferences
currentPath = acadPref.Files.SupportPath

‘ 3. 既存のパスをセミコロンで分割して配列にする
pathArray = Split(currentPath, “;”)

‘ 4. 既にターゲットパスがパス内に存在するかチェックし、余計な重複を防ぐ
isAlreadyExists = False
For i = LBound(pathArray) To UBound(pathArray)
If StrComp(pathArray(i), targetPath, vbTextCompare) = 0 {
isAlreadyExists = True
Exit For
End If
Next i

‘ 5. 新しいパス文字列の構築(ターゲットパスを【最優先(先頭)】にする)
If isAlreadyExists {
‘ 既に存在する場合は、一度そのパスを配列から除外し、後で先頭に結合し直す高度な処理
newPath = targetPath
For i = LBound(pathArray) To UBound(pathArray)
If StrComp(Trim(pathArray(i)), targetPath, vbTextCompare) <> 0 And Trim(pathArray(i)) <> “” Then
newPath = newPath & “;” & pathArray(i)
End If
Next i
Else
‘ 存在しない場合は、単純に先頭に追加
newPath = targetPath & “;” & currentPath
End If

‘ 6. AutoCADの環境設定へ書き戻し
acadPref.Files.SupportPath = newPath

MsgBox “【成功】プロジェクト専用パスを最優先に設定しました:” & vbCrLf & targetPath, vbInformation, “AutoCAD VBA 自動化”
Exit Sub

ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical
End Sub

コードの注目ポイントと、プロが教える「陥りやすい罠」

上記のコードには、現場で生き残るためのテクニックが詰まっています。いくつか重要なポイントを解説しておきましょう。

1. パスの重複登録を防ぐ(無限肥大化の防止)

`SupportPath` に同じパスを何回も追加し続けると、文字列がどんどん長くなり、AutoCAD内部のバッファ溢れやパフォーマンス低下を招きます。コード内のステップ4・5では、「すでにパスが存在する場合は、一度そこから引き抜いて先頭に持ってくる(移動させる)」という洗練された処理を行っています。

2. 区切り文字はセミコロン (`;`)

Windowsの環境変数などと同様に、AutoCADのサポートパスもセミコロン区切りです。カンマやコロンと間違えると、AutoCADがパスを正しく認識できなくなり、裏で大混乱を起こすので注意してください。

3. 【最重要】ネットワークパス(UNC)の罠

もし `targetPath` に `\\Server\Share\Fonts` のようなネットワークパスを指定する場合、AutoCADがそのネットワークに接続されていない状態でこのマクロが走ると、検索パスの適用時に激しいフリーズ(応答なし)を引き起こすことがあります。
実務で組む際は、`Dir` 関数などで事前にネットワークの疎通確認(存在確認)を入れるのが、一流のエンジニアの作法です。

応用:図面を開いた瞬間(`DocumentActivate`)に自動発動させる

「ボタンをわざわざ押すのも面倒くさい。図面を開いた瞬間に勝手に切り替わってほしい!」
そんなワガママを叶えるのが、イベントプロシージャです。

`ThisDrawing` モジュールや `Class` モジュールを駆使すれば、図面が開かれたイベント(`AcadDocument_Activate` など)をフックして、先ほどのロジックを全自動で走らせることが可能です。これにより、ユーザーは「文字化けの存在すら意識しない」理想郷に到達できます。

まとめ

今回は、`AcadApplication.Preferences.Files.SupportPath` を動的にコントロールし、プロジェクトごとに最適な環境を自動構築する手法を解説しました。

  • AutoCADの設定は `Preferences` オブジェクトからコード一発で書き換えられる。
  • サポートパスはセミコロン区切りの文字列なので、配列に分解してパース(解析)する。
  • 優先順位をコントロールすることで、文字化けやハッチング消失を根絶やしにできる。

ここをクリアできれば、単なる「マクロユーザー」から、CAD環境を意のままに操る「AutoCAD自動化エンジニア」へのステップアップは確実です。ぜひ自分の開発環境に組み込んで、その爆速の利便性を体感してみてください。

それでは、次回の極意でお会いしましょう!

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