The main issue is the getViewportModelRect function should be run while inside the vport and not in pspace.
So I made the following changes:
1) localized getViewportModelRect
(defun c:CleanEmptyVP
(/ getViewportModelRect doc ssvp i lyrObj vpEnt vpnum vpObj vpPts p1 p2 ssC) ; localize functions & variables
(vl-load-com)
(defun getViewportModelRect (vport / obj cen ht wid xmin xmax ymin ymax p1 p2)
(setq obj (vlax-ename->vla-object vport))
(if (= (vla-get-ObjectName obj) "AcDbViewport")
(progn
(setq cen (vlax-get obj 'Center))
(setq ht (vlax-get obj 'Height))
(setq wid (vlax-get obj 'Width))
(setq xmin (- (car cen) (/ wid 2.0)))
(setq xmax (+ (car cen) (/ wid 2.0)))
(setq ymin (- (cadr cen) (/ ht 2.0)))
(setq ymax (+ (cadr cen) (/ ht 2.0)))
(setq p1 (trans (list xmin ymin 0.0) 3 2))
(setq p2 (trans (list xmax ymax 0.0) 3 2))
; add the following lines of code
(setq p1 (trans p1 2 0))
(setq p2 (trans p2 2 0))
;
(list p1 p2)
)
)
)
2) get current dwg doc obj to make it easier to process other functions like regen and layer table
(setq i 0
doc (vla-get-activedocument (vlax-get-acad-object)) ; current active dwg
)
3) Get vport number so can set correct vport in mspace
(setq vpEnt (ssname ssvp i))
(setq vpnum (getpropertyvalue vpEnt "number")) ; get vport number to use with cvport
(setq vpObj (vlax-ename->vla-object vpEnt))
4) make sure layer is unlocked so vport can be erased:
(if (= (vla-get-ObjectName vpObj) "AcDbViewport")
(progn
(setq lyrObj (vla-item (vla-get-layers doc) (vla-get-layer vpObj))) ; get layer object vport currently is on
(vla-put-lock lyrobj :vlax-false) ; make sure layer object is unlocked
5) Place get vport corner function here:
(command "_.MSPACE")
(setvar "cvport" vpnum) ; set to matching vport number
(setq vpPts (getViewportModelRect vpEnt)) ; get corners after going inside matching vport
(setq p1 (car vpPts))
(setq p2 (cadr vpPts))
(command "_.Zoom" ".9x")
(setq ssC (ssget "_C" p1 p2))
Now it'll work.