こんにちは!CADルームの運用改善、日々お疲れ様です。
「あっちのプロジェクトはA社指定のPC3ファイル、こっちの案件はB社の専用ペンテーブル……印刷のたびに設定ファイルを切り替えるの、もう面倒くさい!」「うっかり前のプロジェクトの古い設定でPDFを出力してしまい、クライアントから修正指示が飛んできた……」
そんなヒヤリハットや無駄なストレス、今日で終わりです。
今回は、AutoCAD VBAの真骨頂である「オブジェクトモデルの深部へのアプローチ」を使い、図面を開いた瞬間、あるいはボタン一つで、プロジェクトごとに必要なPC3(プロッタ環境設定)やPMP(用紙サイズ設定)の格納フォルダを動的に切り替える『環境制御オートメーション』を構築します。
マクロの記録を卒業し、AutoCADの内部世界を自在に操る「チーフアーキテクト」への第一歩。私と一緒に、優しく、そして深く、その極意を紐解いていきましょう!
—
1. なぜ「手動でのPC3切り替え」は破滅を招くのか?
AutoCADで図面を印刷するとき、私たちはプリンタやスタイルの設定に「PC3ファイル」や「PMPファイル」を使いますよね。
標準の状態では、これらはすべてAutoCADの共通プロファイルフォルダ(ローカルの特定パス)にすべてがブチ込まれています。
しかし、大規模なプロジェクトや複数社が絡む設計現場ではどうでしょう?
- 「A社案件専用のカスタム用紙サイズが入ったPMP」
- 「B社納品用の特殊なペン割り当てがされたPC3」
これらが混ざり合うと、「別プロジェクトの設定が残ったまま図面をパブリッシュし、全ページの線幅が狂って大爆発した」という、エンジニアなら誰もが一度は冷や汗をかく事故が起きます。
解決の鍵:`PreferencesFiles` オブジェクト
AutoCAD VBAには、画面の裏側(アプリケーションの脳髄)を設定するための `AcadPreferences` という強大なオブジェクトが存在します。
その中にある `PreferencesFiles`(ファイルタブの設定に対応)の `PrinterConfigPath` プロパティを書き換えることで、「AutoCADが参照するプリンタ設定ファイルのフォルダそのものを、VBAから瞬時にジャック(変更)」できるのです。
ここをクリアすれば、AutoCAD VBAの基礎とオブジェクトモデルの連携はもうバッチリですよ!
—
2. 全体像:オブジェクト階層の地図を頭に叩き込む
コードを書く前に、AutoCADのオブジェクトモデルがどうなっているか、頭の中に地図を描いておきましょう。
[AcadApplication] (AutoCAD本体)
└─ .Preferences (環境設定全体)
└─ .Files (「ファイル」タブのツリー)
└─ .PrinterConfigPath (プリンタ設定ファイルの検索パス)
私たちが操作するのは、一番根っこにある `ThisDrawing` ではなく、全図面の親玉である `Application` です。
「図面を開いたときに自動でこのパスを書き換えたい」――これを実現するには、「ドキュメントイベント」または「専用の初期化マクロ」を組み合わせます。
今回は、最も安全で確実な「プロジェクト選択型・環境ブートマクロ」のコードを授けましょう。
—
3. 実装コード:プロジェクト別・印刷環境自動切替エンジン
以下のコードを、AutoCADのVBAエディタ(`ALT + F11`)の標準モジュールに貼り付けてください。
実際の現場のフォルダ構成に合わせて、パス(`C:\CAD_Standards\…`)の部分をご自身の環境に書き換えて使うことができます。
Option Explicit
‘ ==============================================================================
‘ 業務自動化支援モジュール:プロジェクト別プリンタ環境コントローラー
‘ 開発者: シニアCADインフラ・アーキテクト
‘ 概要: 指定されたプロジェクトフォルダのPC3/PMPパスをAutoCADに動的ロードします。
‘ ==============================================================================
Public Sub SwitchProjectEnvironment(ByVal projectName As String)
Dim acadApp As AcadApplication
Dim prefsFiles As AcadPreferencesFiles
Dim targetPath As String
On Error GoTo ErrorHandler
‘ 1. アプリケーションオブジェクトの取得(親玉を捉える)
Set acadApp = ThisDrawing.Application
‘ 2. ファイル環境設定オブジェクトへの参照を取得
Set prefsFiles = acadApp.Preferences.Files
‘ 3. プロジェクトに応じた動的パスの構築
‘ ※社内の共有サーバーや、プロジェクトごとのローカルフォルダを指定します
Select Case UCase(projectName)
Case “PROJECT_A”
targetPath = “C:\CAD_Standards\Project_A\Plot Configs”
Case “PROJECT_B”
targetPath = “C:\CAD_Standards\Project_B\Plot Configs”
Case “STANDARD”
‘ デフォルトのパスに戻す場合
targetPath = prefsFiles.PrinterConfigPath ‘ あるいは初期パス
Case Else
MsgBox “指定されたプロジェクト ‘” & projectName & “‘ は定義されていません。”, vbExclamation, “環境切替エラー”
Exit Sub
End Select
‘ 4. フォルダが存在するかどうかの物理的バリデーション
If Dir(targetPath, vbDirectory) = “” Then
MsgBox “ターゲットとなる設定フォルダが存在しません。” & vbCrLf & targetPath, vbCritical, “パス消失エラー”
Exit Sub
End If
‘ 5. 【核心】PrinterConfigPath の動的書き換え
prefsFiles.PrinterConfigPath = targetPath
‘ (おまけ)PMPファイルのパスも連動して切り替える場合
‘ prefsFiles.PrinterStyleSheetPath = targetPath ‘ 必要に応じて拡張可能
‘ 6. 成功フィードバック
MsgBox “印刷環境を切り替えました。” & vbCrLf & _
“現在のPC3読込先: ” & prefsFiles.PrinterConfigPath, vbInformation, “環境切替完了”
Exit Sub
ErrorHandler:
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical, “致命的エラー”
End Sub
‘ ==============================================================================
‘ 実行用ラッパーマクロ(ユーザーがボタン等から叩くエントリポイント)
‘ ==============================================================================
Public Sub RunProjectA_Environment()
Call SwitchProjectEnvironment(“PROJECT_A”)
End Sub
Public Sub RunProjectB_Environment()
Call SwitchProjectEnvironment(“PROJECT_B”)
End Sub
—
4. コードの深掘り解説:なぜこの書き方が「プロ仕様」なのか?
ただ動くだけのコードなら誰でも書けます。ここからは、プロのエンジニアとして知っておくべき「こだわりポイント」を3つ解説します。
① `ThisDrawing` ではなく `ThisDrawing.Application` を使う理由
初心者によくある勘違いが、`ThisDrawing.Preferences` と書いてしまうことです。
`AcadDocument`(今開いている図面)には、実はアプリケーション全体の設定を保持する権限はありません。
環境設定(Preferences)は、AutoCADそのものを統括する `AcadApplication` の領分です。
「どの図面が開いているかに関わらず、AutoCAD全体の脳みそを書き換える」というオブジェクトのスコープ(生存範囲)を意識することが、VBAをマスターする近道です。
② パスの存在チェック(`Dir` 関数によるバリデーション)を怠らない
ネットワークが切断されていたり、フォルダ名がタイポ(打ち間違い)していたりすると、AutoCADは存在しないパスを無理やり設定させられ、その後の印刷コマンド(`_PLOT`)でフリーズしたりクラッシュしたりします。
コード内の `If Dir(targetPath, vbDirectory) = “” Then` という防壁(バリデーション)こそが、現場で絶対に止まらないロギングシステムを作る秘訣です。
③ 戻し忘れを防ぐ設計
プロジェクトが終わった後に「あれ? 次の図面を開いたら昨日設定したA社のPC3しか出てこないぞ?」というパニックを防ぐため、標準環境(`STANDARD`)に戻すルートも必ず用意しておきましょう。
—
5. 発展:図面オープン時(`AcadDocument_Open`)に自動連動させるには?
さらに高度な自動化を目指すなら、ボタンを押させるのではなく、「図面ファイル名(ファイル名規則)をVBAが勝手に読み取って、自動でPC3パスを切り替える」ことも可能です。
VBAエディタの `ThisDocument` モジュールに、以下のイベントプロシージャを記述してみてください。
Private Sub Document_Open()
Dim docName As String
docName = ThisDrawing.Name
‘ ファイル名が “A社_” で始まっていたら自動でProject_Aの環境にする
If Left(docName, 4) = “A社_” Then
ThisDrawing.Application.Preferences.Files.PrinterConfigPath = “C:\CAD_Standards\Project_A\Plot Configs”
ElseIf Left(docName, 4) = “B社_” Then
ThisDrawing.Application.Preferences.Files.PrinterConfigPath = “C:\CAD_Standards\Project_B\Plot Configs”
End If
End Sub
※注意:このイベントを動かすには、図面を開く際にマクロのセキュリティ(VBAのマクロを有効にする設定)が適切に許可されている必要があります。
—
まとめ:自動化の主導権をあなたの手に
今回は、`AcadApplication.Preferences.Files.PrinterConfigPath` を用いた、プロジェクト別印刷環境の動的制御について解説しました。
- AutoCADの全体設定は `Application` オブジェクトから攻める。
- パスを変更することで、社内の多様なクライアント規格を完全自動で吸収できる。
- エラーハンドリングと存在チェックを挟むことで、現場で絶対に壊れないシステムになる。
「マクロの記録」ボタンを押すだけだった昨日までのあなたとは、もうお別れです。
オブジェクトモデルの構造を理解し、AutoCADの息づかいをコントロールできた瞬間、退屈な定時前の手作業は、あなたのエンジニアリングによって「美しい自動化プロセス」へと生まれ変わります。
さあ、あなたのCAD環境を、次の次元へアップデートしに行きましょう!
