I'll just work on one problem at a time, your other one.![]()
I'll leave this one for ASMI to sort out.![]()

Registered forum members do not see this ad.
Hi all,
I am starting this new topic in the hope of getting better response. I found a topic which almost met my requirement here in the 8th post by ASMI. The difference is my blocks have multiple attributes.
My requirements are these:
1. User selects multiple block instances
2. User enters tag (choose if possible, hard coded also will do)
3. User enters starting number, including leading zeros, but no prefix or suffix
4. Routine puts in sequential numbers with leading zeros in the attribute value, starting at top left block, goes left to right, top to bottom.
In step 3 above, if the routine can 'remember' the last number of previous execution and continues, well and good. May be its difficult or impossible. If it can be done, then the routine might just as well 'remember' last tag used so that the user need only press enter on subsequent executions.
Can someone please help me on this?
Thanks in advance, this forum is wonderful.
Guite
I'll just work on one problem at a time, your other one.![]()
I'll leave this one for ASMI to sort out.![]()

Guite,
Go back to the other thread, do what I asked, and I'll sort it out for you.![]()

OOPS. I was referring to Attribute value with drop down list? topic whereas apparently you are referring to Quick Z value.
Guite
1. Specify start number
2. Pick to wanted attribute
3. Select blocks and press Spacebar
Enjoy...
Code:(defun c:mnum(/ stStr stNum nLen cAtr dLst blName fLst blLst blSet aName sLst lZer aStr) (vl-load-com) (if (and (setq stStr(getstring "\nSpecify start number: ")) (setq stNum(atoi stStr)) (setq nLen(strlen stStr)) ); end and (progn (if (and (setq cAtr(nentsel "\nPick attribute > ")) (= "ATTRIB"(cdr(assoc 0(setq dLst(entget(car cAtr)))))) ); end and (progn (setq blName (vla-get-Name (vla-ObjectIDToObject (vla-get-ActiveDocument (vlax-get-acad-object)) (vla-get-OwnerID (vlax-ename->vla-object(car cAtr))))) fLst(list '(0 . "INSERT")(cons 2 blName)) aName(cdr(assoc 2 dLst)) ); end setq (princ "\n<<< Select blocks to number >>> ") (if (setq blSet(ssget fLst)) (progn (setq sLst (mapcar 'vlax-ename->vla-object (mapcar 'car (vl-sort (vl-sort (mapcar '(lambda(x)(list x(cdr(assoc 10(entget x))))) (vl-remove-if 'listp (mapcar 'cadr(ssnamex blSet)))) '(lambda(a b)(<(caadr a)(caadr b)))) '(lambda(a b)(>(cadadr a)(cadadr b))))))) (foreach i sLst (setq lZer "") (repeat(- nLen(strlen(itoa stNum))) (setq lZer(strcat lZer "0")) ); end repeat (setq atLst (vlax-safearray->list (vlax-variant-value (vla-GetAttributes i)))) (foreach a atLst (if (= aName(vla-get-TagString a)) (vla-put-TextString a (strcat lZer(itoa stNum))) ); end if ); end foreach (setq stNum(1+ stNum)) ); end foreach ); end progn (princ "\nEmpty selection! Quit. ") ); end if ); end progn (princ "\nThis isn't attribute! Quit. ") ); end if ); end progn (princ "\nInvalid start number! Quit. ") ); end if (princ) ); end of c:mnum

Thanks a lot, ASMI. I will try it out on Monday.
Cheers,
Guite

WOW! Just tested it and it works like a charm. Thank you so much ASMI.
Cheers,
Guite
It's good![]()
Registered forum members do not see this ad.
The guru strikes again. Guite, ASMI hates being refered to as a guru, but he really is, along with a few others here.![]()
![]()
Bookmarks