こんにちは!現場の図面チェックや納品前のデータ整理で、こんな絶望感を味わったことはありませんか?
「外部から受け取った図面を開いたら、文字スタイルがバラバラ……」
「MSゴシックを指定したはずなのに、MeiryoやHGSゴシック、さらには見慣れない謎のフォントまで混ざっていて、印刷したらレイアウトがガタガタ……」
手作業で一つひとつ文字スタイルを開いてフォントを修正していくなんて、エンジニアの人生の無駄遣いです。
今回は、AutoCAD VBAの心臓部である「AcadDocument」と「TextStyleオブジェクト」を華麗に操り、図面内の全テキストを社内標準フォントへ一瞬で強制統一する極意を伝授します。
ここをクリアすれば、AutoCAD VBAのオブジェクトモデルの基本はバッチリです!一緒にマスターしていきましょう。
—
1. なぜ「マクロの記録」では文字スタイルを統一できないのか?
プログラミング初学者が最初にやりがちなのが、「マクロの記録」を使った自動化です。
しかし、AutoCADを開いてみてください。「マクロの記録」ボタンはどこにもありませんよね。
AutoCADのVBA(Visual Basic for Applications)は、Excelのように操作を録画してコードを作ることはできません。代わりに、AutoCADが内部に持つ「オブジェクトの階層構造(オブジェクトモデル)」を理解し、コードで直接命令を下す必要があります。
文字スタイルの変更も、画面をポチポチ手動でクリックするのではなく、「図面の中にいる文字スタイルの管理人に、直接『フォントを変えろ』と命令する」というアプローチを取ります。これがVBAの本質であり、圧倒的なスピードを生み出す秘密です。
—
2. 攻略の鍵:AutoCADオブジェクトモデルの階層構造
AutoCAD VBAを動かす上で、最初に覚えるべき最も重要なルート(起点)が `ThisDrawing`(現在の図面=AcadDocument) です。
今回のミッションである「フォントの強制統一」は、以下の階層を駆け抜けることで達成されます。
[AutoCAD アプリケーション]
└─ ThisDrawing (AcadDocument)
└─ TextStyles コレクション(図面内にある全文字スタイルの束)
└─ 各 TextStyle オブジェクト(個別の文字スタイル)
├─ .FontFile プロパティ(フォントファイル名)
└─ .Name プロパティ(スタイル名)
難しく考える必要はありません。「図面(ThisDrawing)の中にある文字スタイルたち(TextStyles)の部屋に行き、片っ端からフォントを書き換える」ただそれだけです。
—
3. 【実践】社内標準フォントへ一瞬で書き換えるVBAコード
それでは、開発の現場でそのままコピペして使える実用コードを公開します。
今回は、図面内のすべての文字スタイルが持つフォントを、社内標準である「MSゴシック(TrueTypeフォントの場合は `msgothic.ttc` または等価な指定)」に強制統一するスクリプトです。
VBAエディタ([Alt] + [F11])を開き、標準モジュールに以下のコードを貼り付けてください。
Sub ForceStandardTextStyle()
‘ —————————————————————–
‘ 目的: 図面内のすべての文字スタイルを「MSゴシック」に強制統一する
‘ 対象: 初学者〜中級者向け
‘ —————————————————————–
‘ エラーハンドリングの準備
On Error GoTo ErrorHandler
Dim doc As AcadDocument
Set doc = ThisDrawing ‘ 現在アクティブな図面を取得
Dim tStyle As AcadTextStyle
Dim counter As Integer
counter = 0
‘ 画面描画をロックして処理速度を爆発的に上げる(プロの技)
doc.Utility.Prompt “文字スタイルの統一処理を開始します…” & vbCrLf
‘ 図面内に存在するすべての文字スタイルをループで総チェック
For Each tStyle In doc.TextStyles
‘ 縦書き専用スタイル(@から始まるもの)などを除外したい場合はここで条件分岐も可能ですが、
‘ 今回はシンプルにすべての標準・カスタムスタイルを対象にします。
‘ 読み取り専用スタイル(形状が決まっている特殊なものなど)でエラーが出ないようガード
If (tStyle.Name <> “”) Then
‘ フォント名を「MSゴシック」に変更
‘ 第1引数: フォント名, 第2引数: 太字か(False), 第3引数: 斜体か(False), 第4引数: 文字セット, 第5引数: ピッチ等
tStyle.SetFont “MSゴシック”, False, False, 0, 0
counter = counter + 1
End If
Next tStyle
‘ 変更を確実に画面に反映させるための再生成
doc.Regen acAllViewports
‘ 完了メッセージ
MsgBox “処理が完了しました!” & vbCrLf & _
“合計 ” & counter & ” 個の文字スタイルを「MSゴシック」に統一しました。”, _
vbInformation, “AutoCAD VBA 自動化”
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “致命的なエラー”
End Sub
💡 コードの注目ポイント(プロのエンジニアからの解説)
1. `ThisDrawing` の活用:
現在開いている図面を瞬時に変数 `doc` に格納しています。これが `AcadDocument` オブジェクトです。
2. `For Each … In` 構文:
図面に文字スタイルがいくつあろうとも、自動的に数えてすべてをループ処理してくれます。手動で何個あるか数える必要はもうありません。
3. `tStyle.SetFont` メソッド:
文字スタイルのフォントを一発で書き換える強力なメソッドです。フォント名だけでなく、太字や斜体のフラグもここでコントロールできます。
4. `doc.Regen acAllViewports`:
プログラム側でデータを書き換えた後、AutoCADの画面表示が古いままになることがあるため、強制的に画面を再描画(リジェネ)して見た目を最新化しています。
—
4. 初学者がハマりやすい「3つの罠」と回避策
VBAを書き始めると、必ずと言っていいほど以下の壁にぶつかります。事前に知っていれば怖くありません。
罠その1:「この文字スタイルは変更できません」というエラーが出る
- 原因: 外部参照(XREF)に含まれている文字スタイルや、AutoCADがシステム上ロックしている特殊なスタイル(例: `Standard` や一部の縦書き用スタイル)を無理やり書き換えようとした時に発生します。
- 対策: スタイル名が特定の予約語と一致する場合や、読込専用のオブジェクトを弾く条件分岐(`If`文)をコードに組み込むことで回避できます。
罠その2:フォント名が正しく適用されない(文字化けする)
- 原因: Windowsにインストールされていないフォント名を知らずに指定している場合や、TrueTypeフォントとSHXフォント(AutoCAD独自のフォント)の指定方法を混同している場合に起きてしまいます。
- 対策: `SetFont` メソッドはTrueTypeフォント(Windowsのフォント)の変更に使います。.shxフォント(例: `romans.shx`)を変更したい場合は、`.FontFile` プロパティに直接ファイル名を代入する必要があります。社内標準がTrueTypeなら今回のコードで完璧です。
罠その3:動かした後に「アンドゥ(Ctrl + Z)」が効かない?
- 原因: VBAのマクロ実行は、デフォルトでは細切れのトランザクションとして処理されるため、一括置換を行うと「Ctrl+Z」で一発に戻せなくなることがあります。
- プロからのアドバイス: 実務で使うマクロを組む際は、実行前に必ず「別名で図面を保存(バックアップ)」する習慣をつけましょう。自動化エンジニアの鉄則です。
—
まとめ:ここをクリアすれば、AutoCAD VBAの基本はバッチリ!
お疲れ様でした!今回は `AcadDocument` と `TextStyle` オブジェクトを連携させ、図面内のフォントを自動で一括統一する手法を解説しました。
- `ThisDrawing` から図面のオブジェクトにアクセスする感覚
- `For Each` を使ったコレクションの全走査
- プロパティやメソッドによる確実なデータ書き換え
この3つの型さえ身につければ、レイヤーの自動整理、不要な線の削除、タイトルの自動一括書き換えなど、あらゆる図面クレンジング作業をあなたの意のままに自動化できるようになります。
「もう二度と、手作業で何十枚もの図面を開いてフォントを直さなくていいんだ……」
その解放感こそが、エンジニアが手に入れた最強の武器です。
ぜひ明日の実務から、あなたのAutoCAD環境にこのコードを導入してみてください。それでは、次回の極限の知見でお会いしましょう!
