I am not entirely confident with using this function, and do not always know when it should be invoked.
I am looking into writing information to Excel for example, and have used the following code (based on an example posted on another site):
[color=RED]([/color][color=BLUE]defun[/color] c:ttx [color=RED]([/color][color=BLUE]/[/color] ss xlApp xlBooks xlBook xlSheets xlSheet xlCells column row[color=RED])[/color]
[color=RED]([/color][color=BLUE]vl-load-com[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]setq[/color] ss [color=RED]([/color][color=BLUE]ssget[/color] [color=#ff00ff]"_X"[/color] [color=RED]([/color][color=BLUE]list[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#ff00ff]"*TEXT"[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]progn[/color]
[color=RED]([/color][color=BLUE]setq[/color] xlApp [color=RED]([/color][color=BLUE]vlax-get-or-create-object[/color] [color=#ff00ff]"Excel.Application"[/color][color=RED])[/color]
xlBooks [color=RED]([/color][color=BLUE]vlax-get-property[/color] xlApp [color=#ff00ff]"Workbooks"[/color][color=RED])[/color]
xlBook [color=RED]([/color][color=BLUE]vlax-invoke-method[/color] xlBooks [color=#ff00ff]"Add"[/color][color=RED])[/color]
xlSheets [color=RED]([/color][color=BLUE]vlax-get-property[/color] xlBook [color=#ff00ff]"Sheets"[/color][color=RED])[/color]
xlSheet [color=RED]([/color][color=BLUE]vlax-get-property[/color] xlSheets [color=#ff00ff]"Item"[/color] [color=#009900]1[/color][color=RED])[/color]
xlCells [color=RED]([/color][color=BLUE]vlax-get-property[/color] xlSheet [color=#ff00ff]"Cells"[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]vla-put-visible[/color] xlApp [color=BLUE]:vlax-true[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] column [color=#009900]1[/color] row [color=#009900]1[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]foreach[/color] Str [color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]vla-get-TextString[/color]
[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]vlax-ename->vla-object[/color]
[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]cadr[/color] [color=RED]([/color][color=BLUE]ssnamex[/color] ss[color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]<[/color] [color=#009900]65536[/color] row[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] column [color=#009900]3[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]vlax-put-property[/color] xlCells [color=#ff00ff]"Item"[/color] row column Str[color=RED])[/color]
[color=RED]([/color][color=BLUE]vlax-put-property[/color] xlCells [color=#ff00ff]"Item"[/color] row [color=RED]([/color][color=BLUE]1+[/color] column[color=RED])[/color]
[color=RED]([/color][color=BLUE]strcat[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#ff00ff]"DWGPREFIX"[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#ff00ff]"DWGNAME"[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] row [color=RED]([/color][color=BLUE]1+[/color] row[color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]mapcar[/color]
[color=RED]([/color][color=BLUE]function[/color]
[color=RED]([/color][color=BLUE]lambda[/color] [color=RED]([/color]x[color=RED])[/color]
[color=RED]([/color][color=BLUE]vl-catch-all-apply[/color]
[color=RED]([/color][color=BLUE]function[/color]
[color=RED]([/color][color=BLUE]lambda[/color] [color=RED]([/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]progn[/color]
[color=RED]([/color][color=BLUE]vlax-release-object[/color] x[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] x [color=BLUE]nil[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]list[/color] xlCells xlSheet xlSheets xlBook xlBooks xlApp[color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]alert[/color] [color=#ff00ff]"Close Excel file manually"[/color][color=RED])[/color][color=RED]([/color][color=BLUE]gc[/color][color=RED])[/color][color=RED]([/color][color=BLUE]gc[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]princ[/color] [color=#ff00ff]"\n<< No Text Found in Drawing >>"[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]princ[/color][color=RED])[/color][color=RED])[/color]
The above should hopefully extract all text items to Excel and put the drawing from which they were extracted in the adjacent column.
However, is it acceptable to write the code like this?
[color=RED]([/color][color=BLUE]defun[/color] c:ttx [color=RED]([/color][color=BLUE]/[/color] ss xlApp xlCells column row[color=RED])[/color]
[color=RED]([/color][color=BLUE]vl-load-com[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]setq[/color] ss [color=RED]([/color][color=BLUE]ssget[/color] [color=#ff00ff]"_X"[/color] [color=RED]([/color][color=BLUE]list[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#ff00ff]"*TEXT"[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]progn[/color]
[color=RED]([/color][color=BLUE]setq[/color] xlApp [color=RED]([/color][color=BLUE]vlax-get-or-create-object[/color] [color=#ff00ff]"Excel.Application"[/color][color=RED])[/color]
xlCells [color=RED]([/color][color=BLUE]vlax-get-property[/color]
[color=RED]([/color][color=BLUE]vlax-get-property[/color]
[color=RED]([/color][color=BLUE]vlax-get-property[/color]
[color=RED]([/color][color=BLUE]vlax-invoke-method[/color]
[color=RED]([/color][color=BLUE]vlax-get-property[/color] xlApp [color=#ff00ff]"Workbooks"[/color][color=RED])[/color]
[color=#ff00ff]"Add"[/color][color=RED])[/color] [color=#ff00ff]"Sheets"[/color][color=RED])[/color] [color=#ff00ff]"Item"[/color] [color=#009900]1[/color][color=RED])[/color] [color=#ff00ff]"Cells"[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]vla-put-visible[/color] xlApp [color=BLUE]:vlax-true[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] column [color=#009900]1[/color] row [color=#009900]1[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]foreach[/color] Str [color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]vla-get-TextString[/color]
[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]vlax-ename->vla-object[/color]
[color=RED]([/color][color=BLUE]mapcar[/color] [color=DARKRED]'[/color][color=BLUE]cadr[/color] [color=RED]([/color][color=BLUE]ssnamex[/color] ss[color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]if[/color] [color=RED]([/color][color=BLUE]<[/color] [color=#009900]65536[/color] row[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] column [color=#009900]3[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]vlax-put-property[/color] xlCells [color=#ff00ff]"Item"[/color] row column Str[color=RED])[/color]
[color=RED]([/color][color=BLUE]vlax-put-property[/color] xlCells [color=#ff00ff]"Item"[/color] row [color=RED]([/color][color=BLUE]1+[/color] column[color=RED])[/color]
[color=RED]([/color][color=BLUE]strcat[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#ff00ff]"DWGPREFIX"[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=#ff00ff]"DWGNAME"[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] row [color=RED]([/color][color=BLUE]1+[/color] row[color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]mapcar[/color]
[color=RED]([/color][color=BLUE]function[/color]
[color=RED]([/color][color=BLUE]lambda[/color] [color=RED]([/color]x[color=RED])[/color]
[color=RED]([/color][color=BLUE]vl-catch-all-apply[/color]
[color=RED]([/color][color=BLUE]function[/color]
[color=RED]([/color][color=BLUE]lambda[/color] [color=RED]([/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]progn[/color]
[color=RED]([/color][color=BLUE]vlax-release-object[/color] x[color=RED])[/color]
[color=RED]([/color][color=BLUE]setq[/color] x [color=BLUE]nil[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]list[/color] xlCells xlApp[color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]alert[/color] [color=#ff00ff]"Close Excel file manually"[/color][color=RED])[/color][color=RED]([/color][color=BLUE]gc[/color][color=RED])[/color][color=RED]([/color][color=BLUE]gc[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]princ[/color] [color=#ff00ff]"\n<< No Text Found in Drawing >>"[/color][color=RED])[/color][color=RED])[/color]
[color=RED]([/color][color=BLUE]princ[/color][color=RED])[/color][color=RED])[/color]
Such that fewer variables are used and hence fewer have to be processed through vlax-release-object.
Which is the better programming practice?
Thanks for your advice, time, and interest in this thread.
Cheers,
Lee