【実務・中級編】【初心者向け】AutoCAD VBAで「現在の選択セット」を取得する:PickFirstSelectionSetの活用と注意点 – AutoCAD VBA解析バイブル

スポンサーリンク

AutoCAD VBAを掌握する:`PickFirstSelectionSet`で実現する「直感的」な自動化の極意

AutoCADの自動化において、ユーザーのストレスを最小化する唯一の鍵は「ユーザーが今何をしているか」を忖度することにあります。

多くの初心者は、コマンドを実行するたびに「オブジェクトを選択してください」とユーザーに求めます。しかし、熟練の設計者は違います。彼らは、ユーザーが図面上で既に選択しているオブジェクトをVBA側が先回りして取得する手法を駆使します。

本稿では、AutoCAD VBAにおける「現在の選択セット(PickFirstSelectionSet)」の扱いを、プロの現場で通用するレベルで解説します。

1. なぜ「PickFirst」なのか?

AutoCADの標準的な操作フローは「動詞+名詞」と「名詞+動詞」の2通りあります。VBAツールを作る際、後者の「先に図形を選択し、その後にボタンを押す」というフローをサポートしなければ、現場のオペレーターからは即座に「使えないツール」という烙印を押されます。

これを実現するのが `PickFirstSelectionSet` です。

2. 実践的プロダクションコード

単に「取得するだけ」のコードはネットに溢れていますが、現場で必要なのは「選択がない場合のエラーハンドリング」「既存の選択セットとの競合回避」です。以下のコードをテンプレートとしてください。

‘ ———————————————————
‘ 現在の選択セットを取得し、処理対象とするための堅牢な関数
‘ ———————————————————
Public Sub ProcessPickFirstSelection()
Dim sset As AcadSelectionSet
Dim ent As AcadEntity

‘ 1. 名前付き選択セットの重複エラーを避けるため、既存のセットを破棄
On Error Resume Next
ThisDrawing.SelectionSets.Item(“MyToolSelection”).Delete
On Error GoTo 0

‘ 2. 新規選択セットを作成
Set sset = ThisDrawing.SelectionSets.Add(“MyToolSelection”)

‘ 3. 現在の選択セット(PickFirst)を取得
sset.GetPickFirst

‘ 4. 選択がない場合(ユーザーが何も選んでいない場合)のガード節
If sset.Count = 0 Then
MsgBox “対象オブジェクトが選択されていません。” & vbCrLf & _
“先に図形を選択してから実行してください。”, vbInformation
sset.Delete
Exit Sub
End If

‘ 5. 処理実行
For Each ent In sset
‘ ここで各エンティティに対する処理を行う
Debug.Print “選択されたオブジェクト: ” & ent.ObjectName
Next ent

‘ 6. 後処理(メモリ解放とクリア)
sset.Clear
sset.Delete
End Sub

3. エンジニアが守るべき3つの鉄則

このコードを「動くコード」から「保守可能な資産」に変えるために、以下の3点を徹底してください。

① 選択セットの「削除」を忘れない

`ThisDrawing.SelectionSets` は、AutoCADのドキュメントが閉じられるまでメモリ上に永続化されます。`Add` した後に `Delete` を行わないと、次に同じ名前のセットを作ろうとした瞬間に「既に存在します」という致命的なエラーが発生します。`On Error Resume Next` で削除を試みるのは、AutoCAD VBAにおける生存戦略の基本です。

② 明示的な「クリア」の重要性

処理が終わった後、選択セットを `Delete` するだけでなく、`Clear` を呼ぶ癖をつけてください。これにより、AutoCAD側の「グリップ(青い点)」の表示状態が適切に更新されます。

③ データベース連携時の注意点

もし選択した図形の属性情報をExcelやSQL Serverへ転送する場合、`For Each` ループの中で即座に書き込みを行わないでください。処理件数が数千件を超えると、AutoCADと外部アプリ間のオーバーヘッドで動作が重くなります。
「取得(Array化)」→「処理」→「一括反映」というバッチ処理の原則を守りましょう。

4. 結論:ユーザーの思考を止めないために

「現在の選択セットを取得する」という行為は、単なるプログラミングのテクニックではありません。ユーザーが「今、この線を選択した」という直感的な作業を、ツールがそのまま引き継ぐための架け橋です。

今回紹介したコードは、極めてシンプルですが、エラーハンドリングとメモリ管理という「エンジニアの矜持」が詰まっています。これをベースに、あなたの業務フローに合わせた独自の自動化ツールを構築してください。

AutoCADのAPIは、使い手次第でただの「描画ソフト」から「最強の設計エンジン」へと進化します。次回の記事では、`SelectionSets` を使ったフィルタリング(特定の画層や色だけを抽出する高度な手法)について深掘りしましょう。

健闘を祈ります。

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