Yeah, I'm a bit like that - I end up writing codes for every problem I can manage...
Went with this in the end:
(defun c:MacVP (/ *error* ent1 ent2 Obj1 Obj2 ctr scl doc app)
(vl-load-com)
(defun *error* (err)
(if doc (vla-EndUndoMark doc))
(if (not (wcmatch (strcase err) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\n** Error: " err " **")))
(princ))
(while
(progn
(setq ent1 (car (entsel "\nSelect Source Viewport: ")))
(cond ((eq 'ENAME (type ent1))
(if (eq "VIEWPORT" (cdadr (entget ent1)))
(while
(progn
(setq ent2 (car (entsel "\nSelect Second Viewport: ")))
(cond ((eq 'ENAME (type ent2))
(if (not (eq "VIEWPORT" (cdadr (entget ent2))))
(princ "\n** Object is not a Viewport **")))
(t (princ "\n** No Viewport Selected **")))))
(princ "\n** Object is not a Viewport **")))
(t (princ "\n** No Viewport Selected **")))))
(vla-StartUndoMark
(setq doc
(vla-get-ActiveDocument
(setq app (vlax-get-acad-object)))))
(vl-catch-all-apply
(function
(lambda ( )
(vlax-put-property
(setq Obj2 (vlax-ename->vla-object ent2)) 'Center
(vlax-3D-point
(append
(list
(car
(vlax-get
(setq Obj1 (vlax-ename->vla-object ent1)) 'Center)))
(cdr (vlax-get Obj2 'Center)))))
(vla-put-width Obj2 (vla-get-Width Obj1))
(setq scl (vla-get-CustomScale Obj2))
(vla-put-MSpace doc :vlax-true)
(setvar "CVPORT" (cdr (assoc 69 (entget ent1))))
(setq ctr (getvar "VIEWCTR"))
(setvar "CVPORT" (cdr (assoc 69 (entget ent2))))
(vla-ZoomCenter app
(vlax-3D-point
(cons (car ctr) (cdr (getvar "VIEWCTR")))) 1.)
(vla-put-CustomScale Obj2 scl)
(mapcar
(function
(lambda (vp)
(vla-put-Displaylocked vp :vlax-true)))
(list Obj1 Obj2))
(vla-put-MSpace doc :vlax-false))))
(vla-EndUndoMark doc)
(princ))
Thanks again Tim.