<tt> <hr width="95%" size="2" align="left"> <font color="#006600"><p nowrap>' There are two areas where arrays can be declared.</p> <p nowrap>' Firstly in the General Declarations section. Arrays declared ' here are seen by all procedures in this form or module:</p> </font><p nowrap><font color="#000099">Private </font><font color="#660000">arrayName</font><font color="#330000">(</font><font color="#660000">[intLow To] intHigh</font><font color="#330000">) </font><font color="#000099">As </font><font color="#660000">dataType</p> </font><font color="#006600"><p nowrap>' For example:</p> </font><p nowrap><font color="#000099">Private </font><font color="#660000">lngArray</font><font color="#330000">(2 </font><font color="#000099">To </font><font color="#330000">4) </font><font color="#000099">As Long</p> </font><font color="#006600"><p nowrap>' You can also declare the array as Public, making it visible to ' all forms and modules in the application:</p> </font><p nowrap><font color="#000099">Public </font><font color="#660000">arrayName</font><font color="#330000">(</font><font color="#660000">[intLow To] intHigh</font><font color="#330000">) </font><font color="#000099">As </font><font color="#660000">dataType</p> </font><font color="#006600"><p nowrap>' For example:</p> </font><p nowrap><font color="#000099">Public </font><font color="#660000">strArray</font><font color="#330000">(0 </font><font color="#000099">To </font><font color="#330000">200) </font><font color="#000099">As String</p> </font><font color="#006600"><p nowrap>' Secondly, within procedures:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">arrayName</font><font color="#330000">(</font><font color="#660000">[intLow To] intHigh</font><font color="#330000">) </font><font color="#000099">As </font><font color="#660000">dataType</p> </font><font color="#006600"><p nowrap>' For example:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">intArray</font><font color="#330000">(0 </font><font color="#000099">To </font><font color="#330000">9) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' You can also specify element size like a string variable:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">arrayName</font><font color="#330000">(</font><font color="#660000">[intLow To] intHigh</font><font color="#330000">) </font><font color="#000099">As </font><font color="#660000">dataType </font><font color="#330000">* </font><font color="#660000">intByteSize</p> </font><font color="#006600"><p nowrap>' For example:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">strArray</font><font color="#330000">(3 </font><font color="#000099">To </font><font color="#330000">14) </font><font color="#000099">As String </font><font color="#330000">* 256</p> </font><font color="#006600"><p nowrap>' Also, you can just specify the array length by omitting the ' [intLow To] code shown above. This specifies the upper ' element's index, not neccessarily the arrays length:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">ArrayName</font><font color="#330000">(</font><font color="#660000">intHigh</font><font color="#330000">) </font><font color="#000099">As </font><font color="#660000">dataType</p> </font><font color="#006600"><p nowrap>' For example:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">intArray</font><font color="#330000">(9) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' This array will be indexed from 0 by default (so the array's ' size will be one greater than intHigh) unless the following ' line is added to the General Declarations section:</p> </font><p nowrap><font color="#000099">Option Base </font><font color="#330000">1</p> <hr width="95%" size="2" align="left"> </font><font color="#006600"><p nowrap>' You can also do this (for single dimensional arrays only):</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">scores </font><font color="#000099">As Variant </font><font color="#660000">scores </font><font color="#330000">= </font><font color="#660000">Array</font><font color="#330000">(81, 49, 80, 71, 92, 66)</p> </font><font color="#006600"><p nowrap>' The above scores array will be indexed from 0 unless Option Base 1 ' is added to the General Declarations section.</p> <hr width="95%" size="2" align="left"> <p nowrap>' VB supports static and dynamic arrays. Static arrays are fixed in ' size and can't be changed at runtime, dynamic array sizes can.</p> <p nowrap>' Static arrays are more memory efficient:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">array2</font><font color="#330000">(10 </font><font color="#000099">To </font><font color="#330000">20) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' Dynamic arrays do not have a size defined when initialized:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">array3</font><font color="#330000">() </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' You must ReDim a dynamic array to change its size at runtime:</p> </font><p nowrap><font color="#000099">ReDim </font><font color="#660000">array3</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">4) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' You can preserve the contents of the array elements when you ' ReDim the array by using the Preserve keyword with ReDim:</p> </font><p nowrap><font color="#000099">ReDim Preserve </font><font color="#660000">array3</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">9) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' You can also assign to a dynamic array directly from another ' array without specifying size:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">array4</font><font color="#330000">() </font><font color="#000099">As Integer</p> </font><p nowrap><font color="#660000">array4 </font><font color="#330000">= </font><font color="#660000">array3</p> </font><font color="#006600"><p nowrap>' array4 will now be initialize with the size ' (and element values if any) of array3.</p> <hr width="95%" size="2" align="left"> <p nowrap>' Visual Basic allows you to use For Each ... Next to enumerate ' the items in an array:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">element </font><font color="#000099">As Variant For Each </font><font color="#660000">element </font><font color="#000099">In </font><font color="#660000">array4</font><font color="#330000">() &#160; </font><font color="#006600">'code to process array elements sequentially </font><font color="#000099">Next</p> </font><font color="#006600"><p nowrap>' Because arrays do not have a Count property you can use the ' UBound and LBound methods to establish its length.</p> <p nowrap>' You could use a loop like the following:</p> </font><p nowrap><font color="#000099">For </font><font color="#660000">x </font><font color="#330000">= </font><font color="#000099">LBound</font><font color="#330000">(</font><font color="#660000">ArrayName</font><font color="#330000">()) </font><font color="#000099">To UBound</font><font color="#330000">(</font><font color="#660000">ArrayName</font><font color="#330000">()) &#160; </font><font color="#006600">'code to process array items sequentially </font><font color="#000099">Next</p> </font><font color="#006600"><p nowrap>' The arrays empty parentheses are not required, so the first ' line of code above could be like this:</p> </font><p nowrap><font color="#000099">For </font><font color="#660000">x </font><font color="#330000">= </font><font color="#000099">LBound</font><font color="#330000">(</font><font color="#660000">ArrayName</font><font color="#330000">) </font><font color="#000099">To UBound</font><font color="#330000">(</font><font color="#660000">ArrayName</font><font color="#330000">)</p> </font><font color="#006600"><p nowrap>' To establish the length you could also use the following code ' that subtracts the LowerBound value from the UpperBound value, ' then adds one to the result because the array elements include ' both upper and lower, then returns the result As Integer:</p> </font><p nowrap><font color="#000099">Function </font><font color="#660000">GetCount</font><font color="#330000">(</font><font color="#660000">AnyArray </font><font color="#000099">As Variant</font><font color="#330000">) </font><font color="#000099">As Integer &#160; On </font><font color="#660000">Error </font><font color="#000099">Resume Next &#160; Dim </font><font color="#660000">length </font><font color="#000099">As Integer &#160; </font><font color="#660000">length </font><font color="#330000">= </font><font color="#000099">UBound</font><font color="#330000">(</font><font color="#660000">AnyArray</font><font color="#330000">) - </font><font color="#000099">LBound</font><font color="#330000">(</font><font color="#660000">AnyArray</font><font color="#330000">) + 1 &#160; </font><font color="#660000">GetCount </font><font color="#330000">= </font><font color="#660000">length </font><font color="#006600">' + 1 = inclusive </font><font color="#000099">End Function</p> </font><font color="#006600"><p nowrap>' If you know the data type of the array you could declare ' the AnyArray argument as that type instead of As Variant ' to improve performance:</p> </font><p nowrap><font color="#000099">Function </font><font color="#660000">GetCount</font><font color="#330000">(</font><font color="#660000">sngArray() </font><font color="#000099">As Single</font><font color="#330000">) </font><font color="#000099">As Integer &#160; On </font><font color="#660000">Error </font><font color="#000099">Resume Next &#160; Dim </font><font color="#660000">length </font><font color="#000099">As Integer &#160; </font><font color="#660000">length </font><font color="#330000">= </font><font color="#000099">UBound</font><font color="#330000">(</font><font color="#660000">sngArray</font><font color="#330000">) - </font><font color="#000099">LBound</font><font color="#330000">(</font><font color="#660000">sngArray</font><font color="#330000">) + 1 &#160; </font><font color="#660000">GetCount </font><font color="#330000">= </font><font color="#660000">length </font><font color="#006600">' + 1 = inclusive </font><font color="#000099">End Function</p> </font><font color="#006600"><p nowrap>' Calling the function is as easy as:</p> </font><p nowrap><font color="#660000">intCount </font><font color="#330000">= </font><font color="#660000">GetCount</font><font color="#330000">(</font><font color="#660000">myArray</font><font color="#330000">())</p> <hr width="95%" size="2" align="left"> </font><font color="#006600"><p nowrap><p nowrap>' Multi-dimensional arrays</p> <p nowrap>' Each dimension of the array must contain the same data type.</p> <p nowrap>' The second-last and last dimensions of a multi-dimensional array ' are normally considered to be a Row and a Column respectively.</p> </font><p nowrap><font color="#000099">Private </font><font color="#660000">multiArray</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">5, 1 </font><font color="#000099">To </font><font color="#330000">3) </font><font color="#000099">As Integer</p> </font><font color="#006600"><p nowrap>' So for a two dimensional array in VB the dimension (row) is ' defined first, and the number of elements (cols) for each ' dimension defined second:</p> </font><p nowrap><font color="#000099">Public </font><font color="#660000">2DArray</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">2, 1 </font><font color="#000099">To </font><font color="#330000">8) </font><font color="#000099">As Long</p> </font><font color="#006600"><p nowrap>' This array is a two dimensional array containing 8 elements ' in each dimension:</p> </font><p nowrap><font color="#000099">Dim </font><font color="#660000">i1 </font><font color="#000099">As Integer</font><font color="#330000">, </font><font color="#660000">i2 </font><font color="#000099">As Integer For </font><font color="#660000">i1 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">2 &#160; </font><font color="#000099">For </font><font color="#660000">i2 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">8 &#160; &#160; </font><font color="#660000">2DArray</font><font color="#330000">(</font><font color="#660000">i1</font><font color="#330000">, </font><font color="#660000">i2</font><font color="#330000">) = </font><font color="#666666">&quot;Cell &quot; </font><font color="#330000">&amp; </font><font color="#000099">CStr</font><font color="#330000">(</font><font color="#660000">i1</font><font color="#330000">) &amp; </font><font color="#666666">&quot;,&quot; </font><font color="#330000">&amp; </font><font color="#000099">CStr</font><font color="#330000">(</font><font color="#660000">i2</font><font color="#330000">) &#160; </font><font color="#000099">Next Next</p> </font><font color="#006600"><p nowrap>' You can also assign arrays to the elements of other arrays to ' create multi-dimensional arrays:</p> </font><p nowrap><font color="#000099">Public Sub </font><font color="#660000">CreateMultiArray</font><font color="#330000">() &#160; </font><font color="#000099">Dim </font><font color="#660000">intX </font><font color="#000099">As Integer </font><font color="#006600">' Declare counter variable</p> <p nowrap>&#160; ' Declare and populate an integer array &#160; </font><font color="#000099">Dim </font><font color="#660000">countersA</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">4) </font><font color="#000099">As Integer</p> <p nowrap>&#160; For </font><font color="#660000">intX </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">4 &#160; &#160; </font><font color="#660000">countersA</font><font color="#330000">(</font><font color="#660000">intX</font><font color="#330000">) = </font><font color="#660000">intX &#160; </font><font color="#000099">Next </font><font color="#660000">intX</font></p> <p nowrap>&#160; <font color="#006600">' Declare and populate a string array</font> &#160; <font color="#000099">Dim </font><font color="#660000">countersB</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">4) </font><font color="#000099">As String</p> <p nowrap>&#160; For </font><font color="#660000">intX </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">4 &#160; &#160; </font><font color="#660000">countersB</font><font color="#330000">(</font><font color="#660000">intX</font><font color="#330000">) = </font><font color="#666666">&quot;hello&quot; &#160; </font><font color="#000099">Next </font><font color="#660000">intX</p> <p nowrap>&#160; </font><font color="#006600">' Declare a new two-member array</font> &#160; <font color="#000099">Dim </font><font color="#660000">arrX</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">2) </font><font color="#000099">As Variant</font></p> <p nowrap>&#160; <font color="#006600">' Populate the array with other arrays</font> &#160; <font color="#660000">arrX</font><font color="#330000">(1) = </font><font color="#660000">countersA</font><font color="#330000">()</font> &#160; <font color="#660000">arrX</font><font color="#330000">(2) = </font><font color="#660000">countersB</font><font color="#330000">()</font></p> <p nowrap>&#160; <font color="#006600">' Display a member of each array</font> &#160; <font color="#660000">MsgBox arrX</font><font color="#330000">(1)(2)</font> &#160; <font color="#660000">MsgBox arrX</font><font color="#330000">(2)(3)</font></p> <font color="#000099"><p nowrap>End Sub</p></font> <font color="#006600"><p nowrap>' To increase the size of an array without losing its current ' values use the Preserve keyword:</p></font> <p nowrap><font color="#000099">ReDim Preserve </font><font color="#660000">DynArray</font><font color="#330000">(</font><font color="#000099">UBound</font><font color="#330000">(</font><font color="#660000">DynArray</font><font color="#330000">) + 1)</font></p> <p nowrap><font color="#006600">' Only the upper bound of the last dimension in a multi-dimensional ' array can be changed when you use the Preserve keyword; if you ' change any of the other dimensions, or the lower bound of the ' last dimension, a run-time error occurs.</p> <p nowrap>' Thus, you can use code like this:</p></font> <p nowrap><font color="#000099">ReDim Preserve </font><font color="#660000">Matrix</font><font color="#330000">(10, </font><font color="#000099">UBound</font><font color="#330000">(</font><font color="#660000">Matrix</font><font color="#330000">, 2) + 1)</font></p> <p nowrap><font color="#006600">' But you cannot use this code:</font></p> <p nowrap><font color="#000099">ReDim Preserve </font><font color="#660000">Matrix</font><font color="#330000">(</font><font color="#000099">UBound</font><font color="#330000">(</font><font color="#660000">Matrix</font><font color="#330000">, 1) + 1, 10)</font></p> <hr width="95%" size="2" align="left"> <font color="#006600"><p nowrap>' Multi-dimensional array demonstration</p> <p nowrap>' The following code can be copied and pasted into the form of ' a new project and after creating three command buttons named ' cmdFill, cmdShow and cmdMulti you can run the program:</p> </font><font color="#000099"><p nowrap>Option Explicit</p> <p nowrap>Option Base </font><font color="#330000">1</font></p> <p nowrap><font color="#000099">Private </font><font color="#660000">multiArray</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">5, 1 </font><font color="#000099">To </font><font color="#330000">3) </font><font color="#000099">As String Private </font><font color="#660000">counter </font><font color="#000099">As Integer</p> <p nowrap>Private Sub </font><font color="#660000">cmdFill_Click</font><font color="#330000">()</font></p> <p nowrap>&#160; <font color="#000099">Dim </font><font color="#660000">idx1 </font><font color="#000099">As Integer</font><font color="#330000">, </font><font color="#660000">idx2 </font><font color="#000099">As Integer</p> <p nowrap>&#160; For </font><font color="#660000">idx1 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">5 &#160; &#160; </font><font color="#000099">For </font><font color="#660000">idx2 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">3 &#160; &#160; &#160; </font><font color="#660000">counter </font><font color="#330000">= </font><font color="#660000">counter </font><font color="#330000">+ 1 &#160; &#160; &#160; </font><font color="#660000">multiArray</font><font color="#330000">(</font><font color="#660000">idx1</font><font color="#330000">, </font><font color="#660000">idx2</font><font color="#330000">) = </font><font color="#666666">&quot;Cell &quot; </font><font color="#330000">&amp; </font><font color="#000099">CStr</font><font color="#330000">(</font><font color="#660000">counter</font><font color="#330000">) &#160; &#160; </font><font color="#000099">Next &#160; Next</p> <p nowrap>End Sub</p> <p nowrap>Private Sub </font><font color="#660000">cmdShow_Click</font><font color="#330000">()</font></p> <p nowrap>&#160; <font color="#660000">Me</font><font color="#330000">.</font><font color="#660000">Refresh &#160; CurrentY </font><font color="#330000">= 100</font> &#160; <font color="#000099">Print </font><font color="#666666">&quot; Dim multiarray(1 To 5, 1 To 3) As String&quot;</font> &#160; <font color="#660000">CurrentY </font><font color="#330000">= 400</font></p> <p nowrap>&#160; <font color="#000099">Dim </font><font color="#660000">idx1 </font><font color="#000099">As Integer</font><font color="#330000">, </font><font color="#660000">idx2 </font><font color="#000099">As Integer</p> <p nowrap>&#160; For </font><font color="#660000">idx1 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">5</font> &#160; &#160; <font color="#000099">For </font><font color="#660000">idx2 </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">3</font> &#160; &#160; &#160; <font color="#000099">Print </font><font color="#666666">&quot; multiarray(&quot; </font><font color="#330000">&amp; </font><font color="#660000">_</font> &#160; &#160; &#160; &#160; <font color="#000099">CStr</font><font color="#330000">(</font><font color="#660000">idx1</font><font color="#330000">) &amp; </font><font color="#666666">&quot;,&quot; </font><font color="#330000">&amp; </font><font color="#000099">CStr</font><font color="#330000">(</font><font color="#660000">idx2</font><font color="#330000">) &amp; </font><font color="#666666">&quot;) = &quot; </font><font color="#330000">&amp; </font><font color="#660000">_ &#160; &#160; &#160; &#160; Chr</font><font color="#330000">(34) &amp; </font><font color="#660000">multiArray</font><font color="#330000">(</font><font color="#660000">idx1</font><font color="#330000">, </font><font color="#660000">idx2</font><font color="#330000">) &amp; </font><font color="#660000">Chr</font><font color="#330000">(34)</font> &#160; &#160; <font color="#000099">Next &#160; Next</p> <p nowrap>End Sub</p> <p nowrap>Private Sub </font><font color="#660000">cmdMulti_Click</font><font color="#330000">()</font> &#160; <font color="#000099">Dim </font><font color="#660000">intX </font><font color="#000099">As Integer </font><font color="#006600">' Declare counter variable</p> <p nowrap>&#160; ' Declare and populate an integer array</font> &#160; <font color="#000099">Dim </font><font color="#660000">countersA</font><font color="#330000">(4) </font><font color="#000099">As Integer</p> <p nowrap>&#160; For </font><font color="#660000">intX </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">4</font> &#160; &#160; <font color="#660000">countersA</font><font color="#330000">(</font><font color="#660000">intX</font><font color="#330000">) = </font><font color="#660000">intX</font> &#160; <font color="#000099">Next </font><font color="#660000">intX</font></p> <p nowrap>&#160; <font color="#006600">' Declare and populate a string array</font> &#160; <font color="#000099">Dim </font><font color="#660000">countersB</font><font color="#330000">(4) </font><font color="#000099">As String</p> <p nowrap>&#160; For </font><font color="#660000">intX </font><font color="#330000">= 1 </font><font color="#000099">To </font><font color="#330000">4</font> &#160; &#160; <font color="#660000">countersB</font><font color="#330000">(</font><font color="#660000">intX</font><font color="#330000">) = </font><font color="#666666">&quot;hello&quot;</font> &#160; <font color="#000099">Next </font><font color="#660000">intX</font></p> <p nowrap>&#160; <font color="#006600">' Declare a new two-member array</font> &#160; <font color="#000099">Dim </font><font color="#660000">arrX</font><font color="#330000">(1 </font><font color="#000099">To </font><font color="#330000">2) </font><font color="#000099">As Variant</font></p> <p nowrap>&#160; <font color="#006600">' Populate the array with other arrays</font> &#160; <font color="#660000">arrX</font><font color="#330000">(1) = </font><font color="#660000">countersA</font><font color="#330000">()</font> &#160; <font color="#660000">arrX</font><font color="#330000">(2) = </font><font color="#660000">countersB</font><font color="#330000">()</font></p> <p nowrap>&#160; <font color="#006600">' Display a member of each array</font> &#160; <font color="#660000">MsgBox arrX</font><font color="#330000">(1)(2)</font> &#160; <font color="#660000">MsgBox arrX</font><font color="#330000">(2)(3)</font> <font color="#000099">End Sub</font></p> <hr width="95%" size="2" align="left"></tt>