この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

同名のブロックが複数配置されている中から、1つだけブロック名を変更する。
同名のブロックが複数配置されている中から、1つだけブロック名を変更する。
(変更後のブロック名が既に存在したら、そのブロックに置き換わる)

(defun C:Rename_PickedBlock ( / ss conf oldName InputName tempName)
(vl-load-com) ; ActiveX/VLA関数をロード
(princ "\n名前を変更するブロックを1個選択。")
(if (setq ss (ssget "_+.:S" '((0 . "INSERT"))))
(progn
(setq ent (ssname ss 0))
(setq obj (vlax-ename->vla-object ent))
(setq oldName (vla-get-EffectiveName obj))
)
)
(if oldName
(progn
(if (eq *newName* nil) (setq *newName* ""))
(setq InputName "")
(princ (strcat "\n現在のブロック名=[" oldName "]です。"))
(while (eq "" InputName)
(setq InputName (getstring T (strcat "\n変更後のブロック名を入力<" *newName* ">:")))
(if (eq "" InputName) (setq InputName *newName*) (setq *newName* InputName))
(if (eq oldName *newName*)
(progn
(alert "\n変更前と変更後の名前が同じです")
(setq InputName "")
)
)
)
(if (tblsearch "BLOCK" *newName*)
(progn
(initget "Yes No") ; "Yes" または "No" の入力を受け付けるように設定
(setq conf (getkword (strcat "\nブロック [" *newName* "] が存在します。処理を続行しますか? [Yes/No]: ")))
)
(setq conf "Yes")
)
)
)
(if (eq conf "Yes")
(progn
(setq tempName (strcat *newName* "_" (rtos (* 1000000 (getvar "CDATE")) 2 0) "_temp"))
(setvar "CMDECHO" 0)
(command "undo" "be")
(if (tblsearch "BLOCK" *newName*) (command "-rename" "b" *newName* tempName))
(command "-rename" "b" oldName *newName*)
(command "copybase" "non" "0,0,0" ss "")
(command "undo" "e" "u" "erase" ss "")
(command "pasteclip" "non" "0,0,0")
(princ (strcat "\n選択したブロックの名前を [" *newName* "] に変更しました"))
)
)
(princ)
)
  • Hamu
  • 2026/07/01 (Wed) 17:03:09
Re: 同名のブロックが複数配置されている中から、1つだけブロック名を変更する。
Hamuさま 動作を確認しました ご教授ありがとうございました。
  • THIG
  • 2026/07/02 (Thu) 09:35:46

返信フォーム






プレビュー (投稿前に内容を確認)