I agree with James, if your blocks don't have attributes simply make them xrefs.
For attributed blocks, I use this:
(defun C:ReloadBlock( / expert ss1 ssl inserts blocks oblock)
(setq expert (getvar "expert"))
(setq ss1 (ssget '((0 . "insert")))
ssl (sslength ss1))
(setq inserts
(apply 'append (setq inserts (ssnamex ss1)))
inserts (vl-remove-if-not
(function
(lambda(x)
(= 'ENAME (type x))
)
)
inserts
)
inserts (mapcar (function (lambda(x)
(setq oblock (vlax-ename->vla-object x))
(if (vlax-property-available-p oblock "effectivename")
(vla-get-effectivename oblock)
(vla-getname oblock)
)
)
)
inserts
)
inserts (vl-sort inserts '<)
blocks (vla-get-blocks (vla-get-activedocument(vlax-get-acad-object)))
)
(setvar "expert" 5)
(foreach bname inserts
(setq oblock (vla-item blocks bname))
(cond
((= :vlax-true (vla-get-isxref oblock))
nil
)
(T
(if (findfile (strcat bname ".dwg"))
(progn
(command "._insert" (strcat bname "="))
(command)
(command "._attsync" "n" bname)
)
(princ (strcat "\NCan't find an external definition for " bname "."))
)
)
)
)
(setvar "expert" expert)
(princ)
)