This is really crude, but shows what can be done:
;;;---------------------ToStatic.lsp--------------------------------
;;; Purpose: Converts anonymous block to named static block
;;; Version:1.0
;;; Date: 2 June 2010
;;; Author: Herman Mayfarth
;;; Copyright © 2010 by Herman Mayfarth.
;;; Provided "as is" and without warranty, express or implied.
;;; Use at your own risk.
;;;-----------------------------------------------------------------
(defun C:Static ( / obj)
(setq obj (vlax-ename->vla-object (car (entsel "\nPick a block reference:"))))
(vlax-invoke obj 'ConvertToStaticBlock
(substr (vlax-get-property obj 'Name) 2))
(princ)
);C:Static
If you used it to convert different visibility states to static blocks, you would probably want to rename the blocks afterward, since the anonymous blocks will have names like: *Uxxx, and all this command does is strip the first character from the block name. Since it doesn't check the first character, if you convert a dynamic block named, say, "A325" you will get a static block named "325"
It will convert static, as well as dynamic, unnamed blocks to named blocks.
This could obviously be improved, & anyone is welcome to use this as a starting point for something really slick.
I needed something Q & D for a specific purpose, & only had 5 minutes to spend on it.