I believe this will handle your original request.
Code:
(defun c:FreezeDetails ( / intIndex lstLayers objLayout ssVports lstLayouts strLayout SaveModes RestoreModes *error* lstAvailLayers)
(vl-load-com)
;_ Save modes
(defun SaveModes ( A )
(setq FreezeDetails:ModeList '())
(repeat (length A)
(setq FreezeDetails:ModeList (append FreezeDetails:ModeList (list (list (car A) (getvar (car A))))))
(setq A (cdr A))
)
)
;_ Restore modes
(defun RestoreModes ()
(repeat (length FreezeDetails:ModeList)
(setvar (caar FreezeDetails:ModeList) (cadar FreezeDetails:ModeList))
(setq FreezeDetails:ModeList (cdr FreezeDetails:ModeList))
)
(princ)
)
(SaveModes '("CMDECHO"))
;; Set undo marker
(vla-startUndoMark
(vla-get-activedocument (vlax-get-acad-object))
)
;;; Begin Error Handler -------------------------------------------------
(defun *error* (MSG)
(if (and MSG
(not
(member MSG '("Function cancelled" "quit / exit abort"))
)
)
(princ (strcat "\n*** Program Error: " (strcase MSG) " ***")
)
(if MSG
(princ "\n... Program Cancelled ...")
)
)
(while (< 0 (getvar "cmdactive"))
(command)
)
(RestoreModes)
;; Set undo marker
(vla-EndUndoMark
(vla-get-activedocument (vlax-get-acad-object))
)
;; Quiet Exit
(princ)
)
;;; Begin Main Routine
(setvar 'CmdEcho 0)
(setq lstLayers '("88888 - Module A|Details")
lstLayouts '("Production")
lstAvailLayers '())
(foreach strLayout lstLayouts
(setq objLayout (vla-item (vla-get-layouts
(vla-get-activedocument
(vlax-get-acad-object)
)
)
strLayout
)
intIndex 0
)
(setq ssVports (ssadd))
(if (eq :vlax-false (vla-get-modeltype objLayout))
(vlax-for ent (vla-get-block objLayout)
(if (and (> intIndex 0)
(= (vla-get-objectname ent) "AcDbViewport")
)
(ssadd (vlax-vla-object->ename ent) ssVports)
)
(setq intIndex (1+ intIndex))
)
)
)
(foreach n lstLayers
(if (tblsearch "LAYER" n)
(setq lstAvailLayers (append lstAvailLayers (list n)))
)
)
(if (and (> (sslength ssVPorts) 0)
(> (length lstAvailLayers) 0)
)
(progn
(command "_.vplayer")
(foreach n lstAvailLayers
(command "_Freeze" n "_Select" ssVports "")
)
(command "")
)
)
;_ Exit routine quietly
(*error* nil)
(princ)
)
You can add additional layer names within the list colored red above.
You can specify a different layout or add additional layouts by editing / adding a new string (with quotes) in the list colored blue above.