【入門編】【実務中級】図面内の全ブロック参照(Block Reference)を検索し、その属性値(Attribute)を抽出・編集する – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握する:ブロック属性抽出・編集の極意

こんにちは。現場で戦う皆さんに、一つだけ確かなことをお伝えします。AutoCADの自動化において、「ブロック属性(Attribute)」を自在に操れるようになることは、ただの作業効率化を超えた「図面データという資産の支配権」を手に入れることに他なりません。

マクロの記録ボタンを押して終わる時代は終わりです。今日は、AutoCAD VBAの心臓部であるオブジェクトモデルを突き刺し、図面内のブロックを鮮やかに料理する技術を伝授しましょう。

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

まずは地図を頭に入れましょう。AutoCAD VBAでは、すべてが階層構造になっています。

  • Application: AutoCADそのもの。
  • Document: 開いている図面ファイル。
  • ModelSpace / PaperSpace: 図形が住んでいる「空間」。
  • Entity: 線や円、そして我らが「ブロック参照(BlockReference)」。

これらを辿り、目的のブロックに到達するのがプロの第一歩です。迷子にならないための呪文は「ループ(For Each)で全オブジェクトを走査し、Typeプロパティで正体を暴く」ことです。

2. 【実践】ブロック属性を抽出・編集するコード

このコードは、指定したブロック名の属性値をすべて読み取り、特定の値を書き換えるという、BOM(部品表)作成や管理番号更新に直結する実用的なものです。

Public Sub ManageBlockAttributes()
Dim objEntity As AcadEntity
Dim objBlockRef As AcadBlockReference
Dim varAttributes As Variant
Dim i As Integer

‘ モデル空間内の全オブジェクトを走査する
For Each objEntity In ThisDrawing.ModelSpace

‘ オブジェクトがブロック参照かどうかを確認(ここが一番重要!)
If TypeOf objEntity Is AcadBlockReference Then
Set objBlockRef = objEntity

‘ 特定のブロック名を持つものだけを対象にする
If objBlockRef.Name = “MY_PART_BLOCK” Then

‘ 属性情報を取得(配列として返される)
varAttributes = objBlockRef.GetAttributes

‘ 属性を一つずつチェック
For i = LBound(varAttributes) To UBound(varAttributes)
‘ 属性タグが”PART_NO”だったら値を書き換える
If varAttributes(i).TagString = “PART_NO” Then
varAttributes(i).TextString = “NEW-ID-001”
varAttributes(i).Update ‘ AutoCAD画面上の表示を更新
End If
Next i

End If
End If
Next objEntity

MsgBox “属性の更新が完了しました。”
End Sub

3. 現場で「死なない」ための3つの極意

初心者が必ずと言っていいほど踏む「地雷」があります。これを避けるだけで、あなたのコードの品質はプロレベルに近づきます。

① 属性の有無を決めつけない

`GetAttributes`メソッドは、ブロックに属性が一つも定義されていない場合、エラーを返すことがあります。実務では `If UBound(varAttributes) >= 0 Then` といったガードを入れ、配列が空でないことを確認する癖をつけましょう。

② モデル空間とペーパー空間の罠

上のコードは `ModelSpace` だけを対象にしています。図面枠や表題欄が `PaperSpace`(レイアウト)にある場合、そこも走査対象に加える必要があります。
`For Each objEntity In ThisDrawing.PaperSpace` を使い分けるか、`Layouts` コレクションをループさせる設計思想が求められます。

③ 「更新」の儀式を忘れるな

属性値を書き換えた後、`Update`メソッドを呼んでいますか?これを忘れると、データ上は書き換わっているのに、画面上は古い情報のまま……という「幽霊現象」に悩まされます。「変更したら即Update」。これは鉄則です。

4. 次のステップへ

このスクリプトは単なる入り口です。ここから先は、以下の応用が待っています。

  • 外部CSVとの連携: Excelから部品表を読み込み、一括で属性を流し込む。
  • ネストされたブロック: ブロックの中にブロックが入っている場合、再帰関数(自分自身を呼び出す関数)を使って深層まで掘り起こす。

AutoCAD VBAは、あなたの指先一つで数千の図面を瞬時に修正できる魔法の杖です。まずはこのコードを自分の環境で動かし、「データが書き換わる」という感触を掴んでください。

ここをクリアしたあなたなら、どんな複雑な図面管理業務も自動化できます。自信を持って、一歩前へ進みましょう。質問があれば、いつでも現場の先輩として答えを準備しておきますよ。

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