Ok, here goes ....
Option Base
Used at module level to declare the default lower bound for array subscripts.
Syntax
Option Base {0 | 1}
Remarks
Because the default base is 0, the Option Base statement is never required. If used, the statement must appear in a module before any procedures. Option Base can appear only once in a module and must precede array declarations that include dimensions.
Note The To clause in the Dim, Private, Public, ReDim, and Static statements provides a more flexible way to control the range of an array's subscripts. However, if you don't explicitly set the lower bound with a To clause, you can use Option Base to change the default lower bound to 1. The base of an array created with the Array function or the ParamArray keyword is zero; Option Base does not affect Array or ParamArray.
The Option Base statement only affects the lower bound of arrays in the module where the statement is located.
So, basically what that means is that unless you specify the base (meaning the numeric value) of the first subscript of an array, all arrays begin with item 0 not 1.
So
Option Base 1
Dim ThisArray(5)
creates
ThisArray(1) through ThisArray(5)
There is no ThisArray(0) in this example
But
Option Base 0
Dim ThisArray(5)
creates
ThisArray(0) through ThisArray(4)
There is no ThisArray(5)
So are you confused yet?
Don't sweat it...
Just make sure you always start array counting at 0 and end at the array length minus 1 and all will be fine.
Unless .......
There always has to be an exception now doesn't there....
So...
If an array is defined as:
Dim ThisArray(1 To 5)
The lower subscript (i.e the 1) will always be what was defined in the variable regardless of the setting of Option Base.
Also...
Note that the lower bound of an array created by Array or ParamArray is always 0 regardless of the setting of Option Base.
So Daron, how's that....