【入門編】図面内のテキストオブジェクトをまとめて置換!AcadDocumentとFindTextメソッド – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAの深淵へ:図面内文字列を一括置換する「至高の自動化」を実装する

こんにちは。AutoCADの自動化の世界へようこそ。
「マクロの記録」ボタンを押すだけの世界から、自分の手でAutoCADの頭脳を操作する世界へ。今日はその第一歩として、現場で最も需要が高い「テキストの一括置換」をテーマに、オブジェクトモデルの真髄を伝授します。

単にコードを動かすだけでなく、「なぜそのコードが必要なのか」という背景を理解すれば、あなたの自動化スキルは劇的に進化します。

—

1. AutoCADオブジェクトモデルの「階層」を理解する

AutoCAD VBAをマスターする鍵は、オブジェクトの「家系図」を把握することです。すべてはここから始まります。

  • Application: AutoCADそのもの。
  • Document: 開いている図面ファイル。
  • ModelSpace: 図面の中に配置されている個々のオブジェクトの集まり。

今回やりたいことは、「ModelSpaceという名の広い部屋の中に散らばっている全オブジェクト(TEXTやMTEXT)を一つずつ拾い上げ、その中身を検査・変更する」という作業です。

—

2. 実践:文字列一括置換コード

以下のコードをVBAエディタ(Alt + F11)に貼り付けてみてください。まずは動かしてみることが成功への近道です。

Sub BulkReplaceText()
Dim objEntity As AcadEntity
Dim strTarget As String, strReplace As String

‘ 検索したい文字列と置換後の文字列を指定
strTarget = “旧名称”
strReplace = “新名称”

‘ 図面内のすべてのオブジェクトをループ処理
For Each objEntity In ThisDrawing.ModelSpace

‘ 1. オブジェクトが文字系かチェック(TEXT, MTEXT, ATTRIBに対応)
‘ TypeOf を使うと、オブジェクトの種類をスマートに判定できる
If TypeOf objEntity Is AcadText Or TypeOf objEntity Is AcadMText Then

‘ 2. 文字列を含んでいるか確認して置換
If InStr(objEntity.TextString, strTarget) > 0 Then
‘ Replace関数で文字列を入れ替える
objEntity.TextString = Replace(objEntity.TextString, strTarget, strReplace)

‘ 更新を反映させるためにUpdateメソッドを呼ぶのが作法
objEntity.Update
End If

End If
Next objEntity

MsgBox “置換が完了しました!”
End Sub

—

3. ここがプロのこだわり:知っておくべき「落とし穴」

コードを動かした際、あるいは応用しようとした際に必ずぶつかる壁があります。ここをクリアすれば、あなたはもう初級者ではありません。

① 「なぜ `Update` を呼ぶのか?」

AutoCADのデータベースは常に更新されていますが、画面上の表示を強制的に再描画させるために `Update` メソッドを呼ぶのが安全策です。これを忘れると、文字は書き換わっているのに画面表示が古いまま、という現象が起きます。

② 「ATTRIB(属性定義)の罠」

上記のコードは `AcadText` と `AcadMText` に対応していますが、ブロック内の属性値(ATTRIB)は含まれていません。もし属性まで置換したい場合は、`TypeOf objEntity Is AcadBlockReference` でブロックを捕まえ、その中の `GetAttributes` メソッドを叩くという、もう一段階深いループ処理が必要になります。

③ `InStr`関数の役割

`InStr`関数は「文字が見つかった位置」を返します。0が返ってくれば「存在しない」ということ。この判定を入れることで、無駄な書き込み処理を減らし、マクロの動作速度を劇的に向上させることができます。

—

4. 次のステップへ:自動化のエンジニアとして

今回学んだのは「ModelSpaceをループする」という、AutoCAD VBAにおける最も基本的かつ強力なテクニックです。

  • 応用編: 特定のレイヤーにある文字だけ置換したい場合は?
  • 応用編: 外部参照の中の文字も書き換えたい場合は?

これらはすべて、今回のコードの `If` 文の中に条件を追加していくだけで実現できます。

AutoCAD VBAは、あなたの「退屈な手作業」を「一瞬の快感」に変える魔法の杖です。エラーが出ても恐れないでください。そのエラーこそが、あなたがCADの深淵に触れているという証拠です。

さあ、次はどんな面倒な作業を自動化しましょうか?あなたの自動化エンジニアとしての旅は、まだ始まったばかりです。

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