Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Dim / Redim of an Array


I have an Array that needs to be filled with several values.
I do not know beforehand how many values will be necessary, so I Dim it to
50 values to be on the safe side and Redim it to the actual amount after
calculation (10 in this example)
Logical thinking says I should do that the following way:

1. Dim Arr(50)
2. Fill array with values (after which necessary dimension is known)
3. Redim Preserve Arr(10)

This code gives me the error that the dimension of the matrix is already
set. So I replaced the first line with Dim Arr(), followed by ReDim(50) as
shown in the follwing code (which works):

1. Dim Arr()
2. Redim Arr(50)
3. Fill array with values (after which necessary dimension of 10 is known)
4. Redim Preserve Arr(10)

My first question is: What's wrong with the first section of code ?


OK, So this seems to work now, BUT I actually need a 2 column
multidimensional Array, so I thought this should work:

1. Dim Arr()
2. Redim Arr(50,1)
3. Fill array with values (after which necessary dimension of 10 is known)
4. Redim Preserve Arr(10,1)

But, you guessed, I get an error (nr. 9, out of range) on the "ReDim
Preserve Arr(10, 1)" statement in the example code below. Can anyone tell me
why this doesn't work ?

Sub MDArrayTest()

Dim i As Long
Dim Arr()

ReDim Arr(50, 1)

For i = 0 To 10
Arr(i, 0) = "Col 0: " & i
Arr(i, 1) = "Col 1: " & i
Next

ReDim Preserve Arr(10, 1)

For i = LBound(Arr) To UBound(Arr)
Debug.Print i & " - " & Arr(i, 0) & " - " & Arr(i, 1)
Next

End Sub


Thanx !


  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,718
Default Dim / Redim of an Array

You can only redim a dynamic array. Dimming it as x(50) makes it static.

With Redim Preserve only the last dimension can be changed. So make your
array "horizontal": Redim Arr(1,50).


--
Jim Rech
Excel MVP
"Fred" wrote in message
...
|
| I have an Array that needs to be filled with several values.
| I do not know beforehand how many values will be necessary, so I Dim it to
| 50 values to be on the safe side and Redim it to the actual amount after
| calculation (10 in this example)
| Logical thinking says I should do that the following way:
|
| 1. Dim Arr(50)
| 2. Fill array with values (after which necessary dimension is known)
| 3. Redim Preserve Arr(10)
|
| This code gives me the error that the dimension of the matrix is already
| set. So I replaced the first line with Dim Arr(), followed by ReDim(50) as
| shown in the follwing code (which works):
|
| 1. Dim Arr()
| 2. Redim Arr(50)
| 3. Fill array with values (after which necessary dimension of 10 is known)
| 4. Redim Preserve Arr(10)
|
| My first question is: What's wrong with the first section of code ?
|
|
| OK, So this seems to work now, BUT I actually need a 2 column
| multidimensional Array, so I thought this should work:
|
| 1. Dim Arr()
| 2. Redim Arr(50,1)
| 3. Fill array with values (after which necessary dimension of 10 is known)
| 4. Redim Preserve Arr(10,1)
|
| But, you guessed, I get an error (nr. 9, out of range) on the "ReDim
| Preserve Arr(10, 1)" statement in the example code below. Can anyone tell
me
| why this doesn't work ?
|
| Sub MDArrayTest()
|
| Dim i As Long
| Dim Arr()
|
| ReDim Arr(50, 1)
|
| For i = 0 To 10
| Arr(i, 0) = "Col 0: " & i
| Arr(i, 1) = "Col 1: " & i
| Next
|
| ReDim Preserve Arr(10, 1)
|
| For i = LBound(Arr) To UBound(Arr)
| Debug.Print i & " - " & Arr(i, 0) & " - " & Arr(i, 1)
| Next
|
| End Sub
|
|
| Thanx !
|
|


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 94
Default Dim / Redim of an Array

Fred,

My first question is: What's wrong with the first section of code ?


In the VBE Help, do a search on "declaring arrays". Select the "Declaring
Arrays" item.
In short, there are two types or arrays: 1) Static; 2) Dynamic.

Redim can only be used with Dynamic arrays:
Dim arrTest()


But, you guessed, I get an error (nr. 9, out of range) on the "ReDim
Preserve Arr(10, 1)" statement in the example code below. Can anyone tell

me
why this doesn't work ?


In the VBE Help, do a search on "redim".

The short answer is, if you use ReDim Preserve you can only redim the last
dimension of a multidimensional array. For example:
Dim arrTest(x,y,z)

You can change z, but not x or y.

Possible solution is to flip your array dimensions. Change Arr(x,y) to
Arr(y,x).

Troy


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Dim / Redim of an Array

Jim,

thanks for your quick response. I get the idea now with static and dynamic.
As for the ReDim Preserve: I changed the code and it works perfectly !

Thanx a lot !


"Jim Rech" wrote in message
...
You can only redim a dynamic array. Dimming it as x(50) makes it static.

With Redim Preserve only the last dimension can be changed. So make your
array "horizontal": Redim Arr(1,50).


--
Jim Rech
Excel MVP
"Fred" wrote in message
...
|
| I have an Array that needs to be filled with several values.
| I do not know beforehand how many values will be necessary, so I Dim it

to
| 50 values to be on the safe side and Redim it to the actual amount after
| calculation (10 in this example)
| Logical thinking says I should do that the following way:
|
| 1. Dim Arr(50)
| 2. Fill array with values (after which necessary dimension is known)
| 3. Redim Preserve Arr(10)
|
| This code gives me the error that the dimension of the matrix is already
| set. So I replaced the first line with Dim Arr(), followed by ReDim(50)

as
| shown in the follwing code (which works):
|
| 1. Dim Arr()
| 2. Redim Arr(50)
| 3. Fill array with values (after which necessary dimension of 10 is

known)
| 4. Redim Preserve Arr(10)
|
| My first question is: What's wrong with the first section of code ?
|
|
| OK, So this seems to work now, BUT I actually need a 2 column
| multidimensional Array, so I thought this should work:
|
| 1. Dim Arr()
| 2. Redim Arr(50,1)
| 3. Fill array with values (after which necessary dimension of 10 is

known)
| 4. Redim Preserve Arr(10,1)
|
| But, you guessed, I get an error (nr. 9, out of range) on the "ReDim
| Preserve Arr(10, 1)" statement in the example code below. Can anyone

tell
me
| why this doesn't work ?
|
| Sub MDArrayTest()
|
| Dim i As Long
| Dim Arr()
|
| ReDim Arr(50, 1)
|
| For i = 0 To 10
| Arr(i, 0) = "Col 0: " & i
| Arr(i, 1) = "Col 1: " & i
| Next
|
| ReDim Preserve Arr(10, 1)
|
| For i = LBound(Arr) To UBound(Arr)
| Debug.Print i & " - " & Arr(i, 0) & " - " & Arr(i, 1)
| Next
|
| End Sub
|
|
| Thanx !
|
|




  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 20
Default Dim / Redim of an Array

Troy,

thanks, for your quick response. It works fine now !


"TroyW" wrote in message
...
Fred,

My first question is: What's wrong with the first section of code ?


In the VBE Help, do a search on "declaring arrays". Select the "Declaring
Arrays" item.
In short, there are two types or arrays: 1) Static; 2) Dynamic.

Redim can only be used with Dynamic arrays:
Dim arrTest()


But, you guessed, I get an error (nr. 9, out of range) on the "ReDim
Preserve Arr(10, 1)" statement in the example code below. Can anyone

tell
me
why this doesn't work ?


In the VBE Help, do a search on "redim".

The short answer is, if you use ReDim Preserve you can only redim the last
dimension of a multidimensional array. For example:
Dim arrTest(x,y,z)

You can change z, but not x or y.

Possible solution is to flip your array dimensions. Change Arr(x,y) to
Arr(y,x).

Troy




Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
VBA syntax help: ReDim Preserve an array Dave Excel Discussion (Misc queries) 4 September 8th 07 07:37 PM
Redim 2D Array Subscript Out Of Range Error lopsided[_10_] Excel Programming 6 February 11th 04 08:24 AM
ReDim Problem Casey[_4_] Excel Programming 4 January 7th 04 10:41 PM
ReDim an Array Art[_5_] Excel Programming 3 October 25th 03 03:30 PM
Redim MyArray Peter Pantus Excel Programming 2 September 27th 03 03:37 PM


All times are GMT +1. The time now is 08:08 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"