こんにちは!AutoCAD VBAの世界へようこそ。
マクロの記録ボタンを押して動かすだけの自動化から一歩抜け出し、「AutoCADの内部構造をプログラムから自在に操りたい」と感じているなら、今回のテーマはまさに目からウロコの内容ですよ。
現場でこんなトラブルに悩んだことはありませんか?
- 「新しいPCにCADをインストールしたら、社内標準のカスタム線種やフォントが読み込まれなくなった…」
- 「協力会社から受け取った図面を開くと、文字化けや線種の欠落が起きる…」
- 「チーム全員のCADの環境設定(オプション)を手作業で揃えるのが果てしない…」
これらはすべて、AutoCADの「サポートファイルの検索パス」が正しく通っていないことが原因です。
今回は、最高峰の自動化エンジニアである私が、`AcadApplication.Preferences.Files` オブジェクトを駆使して、社内標準のサポートパスを自動追加・同期する「極限の環境構築術」を伝授します。ここをクリアすれば、あなたのAutoCAD VBAのスキルは間違いなく一段上のステージに到達しますよ!
—
1. なぜ「サポートパスの自動化」が必要なのか?
AutoCADは、フォント(SHX/TTF)、線種(LIN)、ハッチングパターン(PAT)、ブロックなどを読み込む際、「サポートファイルの検索パス」に登録されているフォルダを上から順に探しに行きます。
手作業でオプション画面を開き、「ファイル」タブからパスを追加していく……。これを数台、あるいは数十台のPCで行うのはエンジニアの仕事ではありません。ましてや、パスの順番が狂ったり、存在しないフォルダが指定されたりすると、AutoCADの動作が重くなる原因にもなります。
VBAを使って、「AutoCADが立ち上がった瞬間、あるいはボタン一発で、社内標準のパスが完璧な状態で配置されている」。そんな仕組みをコードで実現していきましょう。
—
2. オブジェクトモデルの理解:`Preferences.Files` の正体
AutoCAD VBAの頂点には `AcadApplication` が君臨しています。その中にある `Preferences` プロパティ、さらにその下の `Files` プロパティを操作することで、普段「オプション」ダイアログで設定している項目をプログラムから読み書きできます。
ここで私たちが触れるのが、`SupportPath` というプロパティです。
このプロパティは、ただの配列ではなく、すべての検索パスがセミコロン(`;`)で連結された一つの巨大な文字列として格納されています。ここに社内標準のパスが存在しているかを確認し、なければ安全に追加・再結合して書き戻す、というのが今回のアルゴリズムの核心です。
—
3. 【実践】社内標準パスを自動同期するVBAコード
それでは、開発の現場でそのままコピペして使える実用コードを公開します。
このコードは、指定した社内標準パスがすでに設定されているかをチェックし、なければ重複させずにパスの先頭(あるいは末尾)に追加するスマートなマクロです。
Sub SyncCompanySupportPath()
On Error GoTo ErrorHandler
Dim acadPref As AcadPreferencesFiles
Dim currentPaths As String
Dim targetPath As String
Dim pathArray() As String
Dim i As Long
Dim isAlreadyExists As Boolean
‘ 【設定エリア】社内標準のサポートパスのパスを指定してください
‘ 例としてネットワーク上の共有フォルダを指定しています
targetPath = “R:\AutoCAD\Standard\Support”
‘ フォルダの存在確認(実務では必須の配慮です)
If Dir(targetPath, vbDirectory) = “” Then
MsgBox “社内標準のサポートフォルダーが見つかりません。” & vbCrLf & _
“ネットワーク接続を確認してください: ” & targetPath, vbCritical, “パス同期エラー”
Exit Sub
End If
‘ 1. PreferencesFiles オブジェクトを取得
Set acadPref = ThisDrawing.Application.Preferences.Files
‘ 2. 現在のサポートパス文字列を取得(セミコロン区切り)
currentPaths = acadPref.SupportPath
‘ 3. パスを配列に分解して、すでに登録されているかチェック
pathArray = Split(currentPaths, “;”)
isAlreadyExists = False
For i = LBound(pathArray) + 1 To UBound(pathArray) ‘ AutoCADの仕様上の微調整を含む
‘ 大文字小文字を区別せずにパスを比較
If StrComp(Trim(pathArray(i)), targetPath, vbTextCompare) = 0 Then
isAlreadyExists = True
Exit For
End If
Next i
‘ 4. 登録されていなければ、先頭(または末尾)に追加
If Not isAlreadyExists then
‘ 優先度を高くするために先頭(一番左)に追加する設計
‘ ※AutoCADは左にあるパスを優先して検索します
acadPref.SupportPath = targetPath & “;” & currentPaths
MsgBox “社内標準のサポートパスを正常に追加・同期しました!” & vbCrLf & targetPath, _
vbInformation, “環境構築完了”
Else
MsgBox “社内標準のサポートパスは既に正しく設定されています。”, _
vbInformation, “同期確認”
End If
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
End Sub
—
4. コードの深掘り解説:エンジニアが押さえるべきポイント
ここからは、プログラミング初学者から一歩抜け出すための重要なポイントを解説します。
① AutoCAD特有の「セミコロン区切り」
Windowsの環境変数「PATH」と同じように、AutoCADのサポートパスもセミコロン(`;`)で繋がっています。そのため、文字列を `Split` 関数でバラバラにしてから比較するのが鉄則です。「部分一致」で判定してしまうと、似たような名前の別フォルダを誤認してしまうため、`StrComp` 関数を使って厳密にパスの一致を確認しています。
② パスの「優先順位」を意識する
AutoCADは、左側にあるパスほど優先的に検索します。社内標準のフォントやブロックを確実に優先させたい場合は、今回のコードのように `targetPath & “;” & currentPaths` と記述し、既存のパスの「先頭」に割り込ませるのがプロのテクニックです。
③ エラーハンドリングと存在確認
ネットワークドライブ(`R:\…` など)を指定する場合、社内LANに接続していない状態でコードを実行するとエラーでVBAが強制終了してしまいます。必ず `Dir` 関数などでフォルダの実在を確認してから処理を行う「防御的プログラミング」を心がけましょう。
—
5. 現場で役立つ応用テクニック:起動時自動実行(acad.lsp / 組み込み)
このマクロを毎回手動で実行するようでは、真の自動化とは言えません。
企業規模で展開する場合は、このVBAをドキュメントオープン時(`AcadDocument_Activate` イベントなど)に走らせるか、あるいは企業のスタートアップ時に読み込まれるVBAとしてグローバルに組み込んでおくと、ユーザーが意識することなく常に最新の環境に同期されます。
PCの入れ替え作業や、新しいプロジェクトが始まったその瞬間に、環境構築のストレスから解放される快感をぜひ味わってください。
—
まとめ
今回は `AcadApplication.Preferences.Files` を使った、社内標準サポートパスの自動同期術を解説しました。
- `Preferences.Files.SupportPath` でオプションのパスを文字列として完全掌握する。
- セミコロン区切りの文字列を配列に分解し、重複チェックと優先度を考慮して安全に書き戻す。
- ネットワークの存在確認など、実務に耐えうる堅牢なコードを書く。
ここをクリアすれば、あなたはもう「言われた通りにマクロを使う人」ではなく、「設計環境そのものをコードでデザインするエンジニア」です。
日々のCAD作業をよりスマートに、より美しく。あなたのAutoCADライフがさらに加速することを応援しています!
