Array argument must be ByRef

Arrays declared with Dim, ReDim, or Static can't be passed ByVal. This error has the following cause and solution:

  • You tried to pass a whole array ByVal. An individual element of an array can be passed ByVal (by value), but a whole array must be passed ByRef (by reference). Note that ByRef is the default. If you must pass an array ByVal to prevent changes to the array's elements from being propagated back to the caller, you can pass the array (argument) in its own set of parentheses, or you can place it into a Variant, and then pass the Variant to the ByVal parameter, as follows:
Dim MyVar As Variant 
MyVar = OldArray() 

For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.