;以下程序目的是把多个文档中的属性块文字更改, ;;为什么我加入(vla-activate each)程序就不能正确执行,而取消此代码可以执行,请高手指点 (defun c:sss (/ AcadObject AcadDocument mSpace ssobj attributes val-att-ent) (VL-LOAD-COM) (setq AcadObject (vlax-get-acad-object) AcadDocument (vla-get-ActiveDocument AcadObject) AcadDocuments (vla-get-Documents AcadObject) mSpace (vla-get-ModelSpace AcadDocument) ) (setq gpcode (vlax-make-safearray vlax-vbInteger '(0 . 1))) (vlax-safearray-fill gpcode '(0 66)) (setq datevalue (vlax-make-safearray vlax-vbvariant '(0 . 1))) (vlax-safearray-fill datevalue '("insert" 1)) (vlax-for each AcadDocuments (vla-activate each);此处加入此代码后程序不能正确执行 (setq ssobj (vla-add (vla-get-selectionsets each) "year11") ) (vla-select ssobj acSelectionsetAll nil nil gpcode datevalue) (if (> (vla-get-count ssobj) 0) (progn (vlax-for every ssobj (cond ((and (= (vla-get-objectname every) "AcDbBlockReference") (= (vla-get-hasattributes every) :vlax-true) ) (progn (setq attributes (vlax-variant-value (vla-getattributes every)) ) (setq i 0) (while (< i (vlax-safearray-get-u-bound attributes 1)) (setq val-att-ent (vlax-safearray-get-element attributes i) ) (if (= (vla-get-tagstring val-att-ent) "YEAR_1") (progn (vla-put-textstring val-att-ent "open-close") ;;; (vla-put-tagstring val-att-ent "tag") ) ) (setq i (1+ i)) ;(vla-update val-att-ent) (princ (strcat "\n--正在更新----" (vla-get-name each) "中属性文字" (vla-get-name every) "---" ) ) ) ;while ) ) (t (princ "\nasss")) ) ) ) ) (vla-regen each :vlax-true) (vla-delete ssobj) (setq attributes nil val-att-ent nil ) ) ;end if )
|