Try this --
very minimally tested. It complains if drawings contain Xlines or Rays [it can't find their extents] or Xrefs [it doesn't like Inserting], but in the absence of such things, it seems to work.
(vl-load-com)
(defun C:BC (/ blkfolder space nextUL colwd colUL blkLL blkUR blkwd blkht)
(setq osm (getvar 'osmode))
(setvar 'osmode 0)
(alert "Pick OK here, then double-click any file in desired folder: ")
(setq
blkfolder (getfiled "Find folder" "" "dwg" 0)
blkfolder (substr blkfolder 1 (1+ (vl-string-position 92 blkfolder 1 T))); path without dwg name
space 100 ; between blocks and min. from limits <------ set as desired
colUL (list space (- space) 0); upper left of first column [one space-width to right of and below 0,0]
nextUL colUL ; for first Block
rowno 1
colwd 0 ; width of widest block in column [to set X coordinate of next column]
); end setq
(foreach blk (vl-directory-files blkfolder "*.dwg" 1)
(command "_.insert" (strcat blkfolder blk) (getvar 'viewctr) "" "" "")
(vla-getboundingbox (vlax-ename->vla-object (entlast)) 'minpt 'maxpt)
(setq
blkLL (vlax-safearray->list minpt)
blkUR (vlax-safearray->list maxpt)
blkwd (- (car blkUR) (car blkLL))
blkht (- (cadr blkUR) (cadr blkLL))
); setq
(if (= rowno 11)
(setq ; then - start new column to right of previous column
colUL (polar colUL 0 (+ colwd space))
nextUL colUL
colwd 0
rowno 1
); setq
); if - no else [next in current column]
(command
"_.zoom" "_object" (entlast) ""
"_.move" (entlast) "" (list (car blkLL) (cadr blkUR)) nextUL
); command
(setq
nextUL (polar nextUL (* pi 1.5) (+ blkht space))
rowno (1+ rowno)
colwd (max blkwd colwd)
); setq
); foreach
(setvar 'osmode osm)
(command "_.zoom" "_extents")
(princ)
); defun