The function issue is no matter here, I think.
Some programming philosophies do not distinguish between a function and a procedure. A function which returns zero is the same as a procedure which returns nothing at all. It serves it's function anyway. In VB6 we can call a function in the same way as a procedure when we do not require the return value. This shows colorful what a procedure is to be. If we need the return value, we use it and use the function in an expression. If we do not need the return value, we use the function like a statement. VB6 allows this perfectly. In fact the Sub is not required at all, being only a function with no return value.

The array issue, however, is the issue here definitely. As you say, aio, each element has to be assigned individually. You cannot assign a range of cells to a 2-dimensional array in one single instruction.