And to pick an xref to be loaded from another file, then also rename it:
Code:
(vl-load-com)
;;; Rename & Reload XRef
(defun c:XRefRen (/ xn xo name)
(while (not xo) ;Check if something's selected
(if (setq xn (entsel "\nPick xref to rename & repath <or ENTER type name>: "))
;Ask use to pick (or Enter to give name)
(setq xn (car xn)) ;Getonly the ENAME
(setq xn (getstring "\nEnter XRef name: ")) ;Else ask for block name
) ;_ end of if
(cond
((= (type xn) 'ENAME) ;If ENAME
(setq xo (vlax-ename->vla-object xn)) ;Get object ref of block insert
(if (= (vla-Get-ObjectName xo) "AcDbBlockReference") ;Check if it's a block
(setq xo (vla-Item (vla-Get-Blocks (vla-Get-ActiveDocument (vlax-get-acad-object))) (vla-Get-Name xo)))
;Get block def object
(progn
(princ "\nThat's not a BLOCK object, only blocks can be XREFS.")
(setq xo nil)
) ;_ end of progn
) ;_ end of if
)
((= (type xn) 'STR)
(if (not (setq xo (vla-Item (vla-Get-Blocks (vla-Get-ActiveDocument (vlax-get-acad-object))) xn)))
;Get block def object
(progn
(princ "\nThat's not a BLOCK object, only blocks can be XREFS.")
(setq xo nil)
) ;_ end of progn
) ;_ end of if
)
) ;_ end of cond
(if xo
(if (not (= (vla-Get-ObjectName xo) "AcDbBlockTableRecord")) ;Check if it's a block
(progn
(princ "\nThat's not a BLOCK object, only blocks can be XREFS.")
(setq xo nil)
) ;_ end of progn
(if (/= (vla-Get-IsXref xo) :vlax-true) ;Check if it's a xref
(progn
(princ "\nThat's not a XREFS.")
(setq xo nil)
) ;_ end of progn
) ;_ end of if
) ;_ end of if
) ;_ end of if
) ;_ end of while
(if (and xo (setq name (getfiled "Browse DWG to replace XRef" (findfile (vla-get-Path xo)) "dwg" 0))) ;Pick file
(progn
(vla-Put-Name xo (vl-filename-base name))
(vla-Put-Path xo name)
(vla-Reload xo)
)
)
(princ)
) ;_ end of defun