Ok so... this does work but it's an old routine and it does have some limitations. I'm too much a novice at coding to really be able to sort this out. I assume since 2007, there is a better, leaner, and/or more elegant way to do this.
It works like this (abbreviated):
1. You select a block
2. You enter the Row and Column spacing
3. You pick an internal point
4. It creates a hatch (ANSI31 - scaled so that the distance between the lines equals your desired row spacing)
5. It explodes that hatch
6. It uses the "array along path" (I think) to array the chosen block along the resulting lines at your given column spacing)
7. Deletes the lines leaving the blocks
8. Explodes the remaining arrays
Issues:
1. There are times when the setting of values regarding display of hatches (or your row spacing) can cause this routine to fail because it can (I assume) come up against the "Hatch too dense to display" error.
2. You cannot "select object(s)" to select the boundary, only "select internal point" which in large drawings can have issues.
3. It's "finicky" about how you enter the row and column distances (sometimes it just doesn't "take")
4. There is no undo "mark" (if that's what you call it) so if you need to undo, it steps through each block, one at a time, then the hatch elements... etc.
Although the DCL aspect of this is nice, it's not strictly necessary. There are only a few things to input, and the block could be picked on screen or it's name entered manually.
Thanks in advance for any help.
-JP