- ベストアンサー
(AcadLisp/VBA) 事前選択して処理
- AutoCAD2004のVBAマクロで事前に選択したオブジェクトを処理する方法を探しています。
- 選択中のオブジェクト情報はPickFirstSelectionSetで取得可能ですが、vbarunコマンドの実行で選択解除されてしまい、役に立てません。
- Lisp側で選択図形の情報を取得してVBAに渡す手法も考えていますが、試行錯誤中です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No1です。さらに追加です。 No2でのオブジェクトは最後に選択されたエンティティでした。 なので選択を解除した状態でも選択されているような振る舞いを し期待しない動作をします。 サブプロシージャを実行する際にLISPで選択状態を確認し 選択状態であれば実行する様にすればよいです。 (if (/= cdr((ssgetfirst)) nil) (vl-vbarun "module1.myfunc"))
その他の回答 (2)
- 11zep
- ベストアンサー率36% (48/133)
No1です。 試す事もせずに書きこんでしまい反省しております。 今度は、テストしました。 「ThisDrawing.ActiveSelectionSet」が主さんが必要としている オブジェクトです。 以下のコードで予め選択した線分が実行時に削除される事を 確認しました。試してみて下さい。 ---- 例 ---- Dim MySet As AcadSelectionSet Set MySet = ThisDrawing.ActiveSelectionSet MySet.Erase Set MySet = Nothing
お礼
反省だなんてとんでもない!おかげで解決しそうです。 たしかに、ActiveSelectionSetで取れました・・・ それも・・・、vbarun で選択解除された場合のみ、正常に取得できるっぽい(苦笑。 ややこしくなるので書かなかったんですが、SelectionSets("CURRENT")と明示的に呼ぶと「キーが存在しない」と言われたり、VBE上でF5実行だと一部しか取得できなかったり、色々動きがあやしくて、混乱してたんです。 しっかり確認した上で、報告&情報展開とともにクローズ(ベストアンサー)しますね。 本当にありがとうございます><。
- 11zep
- ベストアンサー率36% (48/133)
-vbarunの前に「^C^C」が入力されていませんか? ESCを2回送信しているので選択を解除しているのでは?
お礼
キャンセルしてないです。".-"などの記号も色々変えてみたけど、vbarunを実行した時点で解除されちゃうみたいでした。
お礼
ちょっとまだ作れてないんですが、 選択なしでも使用したいので、LISPで選択中かチェックしてVBA側に受け渡す(LISPの変数を覗く?)つもりです。 使い方が悪いとか、2004までの問題なのかも知れませんが、 いずれも情報の更新契機に難があり、ActiveSelectionSet以外は使えず、ActiveSelectionSetも注意が必要なようでした。 ---- ◇ .SelectionSet("xxxx") 名前指定は使えない。 少なくともCURRENTやPICKFIRSTは、更新契機がおかしい。初回は「キーが存在しません」。ActiveSelectionSetなどにアクセスすると更新されるらしく、アクセスした時の情報が残り続ける。 ◇ .PickFirstSelectionSet 用途不明。 .Name = "PICKFIRST"。「選択中のオブジェクト」を取得できるが、VBARUN実行で選択解除されてしまうため、(VBE上F5実行なら取得できるが・・・)意味がない。 ◇ .ActiveSelectionSet 癖あり、要注意。 .Name = "CURRENT"。VBARUNなどの「コマンド実行によって(自動的に)選択解除されたオブジェクト」を取得できる。ただし、ユーザ操作「選択→キャンセル」で選択解除されたものはセットされず、最後に「自動解除」された情報が残り続けるため、注意が必要(要LISPでのチェック)。 以下、例。「※」で解除されたオブジェクトをActiveSelectionSetで取得できる/してしまう。 ・基本的な仕様例。1を取得できる。 1. 選択 2. VBARUN(※選択解除) → ActiveSelectionSet ・注意が必要なパターン。1を取得してしまう。 1. 選択 2. ポリライン生成コマンド(※選択解除) 3. キャンセル 4. 選択 5. キャンセル(手動選択解除) 6. VBARUN (選択なし) → ActiveSelectionSet
補足
Lispとても助かります。参考にさせてもらいつつ、勉強の足ががりにしようと思います。 後日、報告した上でクローズしますね。