【入門編】【初心者向け】AutoCAD VBAで図面上のテキスト(Text)とMTextオブジェクトのフォント・高さを一括変更する – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAで図面を制する:テキストの一括置換から始める「自動化の第一歩」

こんにちは。AutoCADの自動化の世界へようこそ。
日々、手作業で文字の高さやフォントを一つずつ修正していませんか?もしそうなら、今日でその苦行は卒業です。

「マクロの記録」ボタンがないAutoCADにおいて、VBAはまさに「CADを自在に操るための魔法の杖」です。今回は、初心者の方が最も頻繁に直面する「図面内のテキスト一括修正」を題材に、AutoCAD VBAの心臓部である「オブジェクトモデル」の考え方を伝授します。

1. AutoCAD VBAの「設計思想」を理解する

まず、重要な概念を一つだけ覚えてください。AutoCAD VBAにおいて、図面は「オブジェクトの集合体」です。

  • AcadApplication: AutoCADそのもの(親玉)
  • AcadDocument: 現在開いている図面(作業場)
  • ModelSpace: 図形が描かれているメインのキャンバス

私たちは「ModelSpaceというキャンバスの中にいるすべてのオブジェクトを一つずつ確認し、それが『Text』か『MText』だったらプロパティ(高さやフォント)を書き換える」という処理を記述します。

2. 実践:テキスト・MTextを一括変更するコード

以下のコードをVBAエディタ(`Alt + F11` で起動)の標準モジュールに貼り付けてみてください。

Option Explicit

‘ 図面内の全ての文字を一括で修正するプロシージャ
Public Sub BatchUpdateTextProperties()
Dim ent As AcadEntity
Dim txtObj As AcadText
Dim mtxtObj As AcadMText

‘ 修正したい設定値
Dim targetHeight As Double: targetHeight = 5.0
Dim targetFont As String: targetFont = “MS Gothic” ‘ フォント名は環境に合わせてください

‘ ModelSpace内の全オブジェクトをループ処理
For Each ent In ThisDrawing.ModelSpace

‘ オブジェクトの種類を判定(これがVBAの基本!)
If TypeOf ent Is AcadText Then
Set txtObj = ent
txtObj.Height = targetHeight
‘ ※フォントはTextStyle経由で変更するのがAutoCADの作法です
txtObj.Update

ElseIf TypeOf ent Is AcadMText Then
Set mtxtObj = ent
mtxtObj.Height = targetHeight
mtxtObj.Update

End If
Next ent

MsgBox “更新が完了しました!”, vbInformation
End Sub

3. コードの「ここが肝」:なぜこの書き方なのか?

初心者の方が特に疑問に思うポイントを解説します。

① `TypeOf` による判定

図面には線(Line)や円(Circle)など、様々なオブジェクトが混在しています。「高さ」というプロパティを持っていないオブジェクトに対して無理やり命令を送ると、エラーで止まってしまいます。`TypeOf` を使って「あなたはテキストですか?」と確認する手順が、堅牢なコードへの第一歩です。

② `.Update` メソッドの重要性

プロパティを書き換えただけでは、画面上の見た目がすぐには変わらないことがあります。`.Update` を呼ぶことで、AutoCADのレンダリングエンジンに対して「今、変更したから描き直して!」と明示的に指示を出しています。これを忘れると、「実行したのに何も変わらない……」という罠にハマります。

③ なぜフォント変更をあえてシンプルにしたか

AutoCADのフォントは「文字スタイル(TextStyle)」に紐付いています。個別のテキストにフォントを直書きするのではなく、「文字スタイルそのものを書き換える」のが実務上の定石です。今回は入門として高さにフォーカスしましたが、次は `ThisDrawing.TextStyles` を操作する方法に挑戦してみてください。

4. 陥りやすいエラーと回避策

  • 「オブジェクトが必要です」というエラー:

これは `Set` を忘れているときによく起こります。VBAにおいて、オブジェクト(図形)を変数に代入する際は必ず `Set` が必要です。

  • 「読み取り専用です」というエラー:

図面がロックされているか、画層がロックされている可能性があります。実務では `If ent.Layer` などで画層の状態もチェックすると完璧です。

最後に:自動化は「小さな成功」の積み重ね

自動化のコツは、最初から完璧を目指さないことです。
「まずは高さを変えてみる」「次に特定の画層だけ変えてみる」といった小さな成功体験を繰り返すことで、あなたの手元には強力なツール群(ライブラリ)が溜まっていくはずです。

これが理解できれば、あなたはもう「AutoCADを操作される側」から「AutoCADを自在に操るエンジニア」への階段を登り始めています。

もし分からないことがあれば、いつでもコードを眺めてみてください。オブジェクトたちは、あなたが命令してくれるのをいつでも待っていますよ!

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