I wrote this a few years back when I was first learning VL (could use some work to simplify); please take from it what you like (modify to support True Color):
Code:
(vl-load-com)
(defun c:CLC () (c:ChangeLayerColor))
(defun c:ChangeLayerColor (/ *error*)
(princ "\rCHANGELAYERCOLOR ")
(defun *error* (msg)
(if acDoc
(progn
(vla-endundomark acDoc)
(if regen
(vla-regen acDoc acAllViewports)
)
)
)
(cond ((not msg)) ; Normal exit
((member msg '("Function cancelled" "quit / exit abort"))) ; <esc> or (quit)
((princ (strcat " ** Error: " msg " ** ")))
) ; Fatal error, display it
(princ)
)
((lambda (acDoc / ss color oLayers oLayer layers regen)
(vla-startundomark acDoc)
(if (not (setq ss (ssget "_i")))
(progn
(prompt "\nSelect entity on layer to change color: ")
(setq ss (ssget))
)
)
(if (= 1 (sslength ss))
(setq color
(cdr
(assoc 62
(tblsearch "layer"
(cdr (assoc 8 (entget (ssname ss 0))))
)
)
)
)
)
(if (and ss
(princ "\nSelect replacement layer color: ")
(setq color (acad_colordlg (if color color 1) nil))
)
(progn
(setq oLayers (vla-get-layers acDoc))
(vlax-for x (setq ss (vla-get-activeselectionset acDoc))
(if
(not
(vl-position (setq oLayer (vla-item oLayers (vla-get-layer x))) layers)
)
(setq layers (cons oLayer layers))
)
)
(vla-delete ss)
(foreach oLayer layers
(if (or regen
(= :vlax-true (vla-get-lock oLayer))
)
(setq regen T)
)
(vla-put-color oLayer color)
)
(*error* nil)
)
)
)
(vla-get-activedocument (vlax-get-acad-object))
)
)