Array argument must be ByRef

This page is specific to the Visual Basic for Applications (VBA) Language Reference for Office 2010.

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).