Not exactly [maybe] but have a look at this short sample.... I will try to post here one of my commands for this AREATAG
(vl-load-com)
(defun commandended
(reactor params / atts att1 att2 text_att1 text_att2)
(if modified_list
(foreach blk modified_list
(setq atts
(reverse (vlax-safearray->list
(vlax-variant-value (vla-getattributes blk))))
att1 (car atts)
att2 (cadr atts)
text_att1 (vla-get-textstring att1)
text_att2 (vla-get-textstring att2))
(if (/= text_att2 text_att1)
(vla-put-textstring att1 (vla-get-textstring att2)))))
(setq modified_list nil))
(defun subobjmodified (owner reactor params)
(if (and (not (wcmatch (getvar "cmdnames") "UNDO,U,REDO,OOPS"))
(not (vl-position owner modified_list)))
(setq modified_list (cons owner modified_list))))
(defun erased (owner reactor params)
(vlr-owner-remove reactor owner)
(vlr-data-set reactor nil)
(vlr-remove reactor))
(defun C:TEST (/ obj obj_reactor)
(setq obj (vlax-ename->vla-object
(car (entsel "\nSelect a block with two attributes: "))))
(if (not editor_reactor)
(setq editor_reactor
(vlr-editor-reactor
"editor"
'((:vlr-commandended . commandended)))))
(setq obj_reactor
(vlr-object-reactor
(list obj)
(list obj)
;;"obj"
'
((:vlr-erased . erased)
(:vlr-subobjmodified . subobjmodified))))
(princ))
(princ)