ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Option Explicit and Arrays (https://www.excelbanter.com/excel-programming/272263-option-explicit-arrays.html)

Harlan Grove[_5_]

Option Explicit and Arrays
 
Just caught a typo.

In Excel 97 VBE, the following general module code doesn't generate a compile
error.

'---- begin VBA ----
Option Explicit

Sub foo()
Dim n As Long
n = 5
ReDim y(1 To 5) '<- !!
MsgBox n
End Sub
'---- end VBA ----

Is the ReDim line an array variable declaration similar to Dim, or a statement,
or a hybrid? Does this work the same in 2K and XP?

--
Never attach files.
Snip unnecessary quoted text.
Never multipost (though crossposting is usually OK).
Don't change subject lines because it corrupts Google newsgroup archives.

Matthew Connor

Option Explicit and Arrays
 
Harlan Grove wrote:
Just caught a typo.

In Excel 97 VBE, the following general module code doesn't generate a compile
error.

'---- begin VBA ----
Option Explicit

Sub foo()
Dim n As Long
n = 5
ReDim y(1 To 5) '<- !!
MsgBox n
End Sub
'---- end VBA ----

Is the ReDim line an array variable declaration similar to Dim, or a statement,
or a hybrid? Does this work the same in 2K and XP?

Works as is in 2002 (XP).

It causes an error if it is changed to:
ReDim Preserve y(1 To 5)

Apparently this is a feature - I found in the help the following:
"Caution: The ReDim statement acts as a declarative statement if the
variable it declares doesn't exist at module level or procedure level.
If another variable with the same name is created later, even in a
wider scope, ReDim will refer to the later variable and won't
necessarily cause a compilation error, even if Option Explicit is in
effect. To avoid such conflicts, ReDim should not be used as a
declarative statement, but simply for redimensioning arrays."


Regards,

Matthew


Chip Pearson

Option Explicit and Arrays
 
Harlan,

The Help file indicates that this is the expected behavior.


Caution The ReDim statement acts as a declarative statement if
the variable it declares doesn't exist at module level or
procedure level.
<<<

It is the same in 2000 and 2002.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com


"Harlan Grove" wrote in message
...
Just caught a typo.

In Excel 97 VBE, the following general module code doesn't

generate a compile
error.

'---- begin VBA ----
Option Explicit

Sub foo()
Dim n As Long
n = 5
ReDim y(1 To 5) '<- !!
MsgBox n
End Sub
'---- end VBA ----

Is the ReDim line an array variable declaration similar to Dim,

or a statement,
or a hybrid? Does this work the same in 2K and XP?

--
Never attach files.
Snip unnecessary quoted text.
Never multipost (though crossposting is usually OK).
Don't change subject lines because it corrupts Google newsgroup

archives.



RobertW

Option Explicit and Arrays
 
There are two types of arrays(i.e. static and dynamic). A
static array is dim myarray(1 to 5). A dynamic array will
appear as dim myarray(). And then the code further down,
will show the redim statement specifying the parameters,
such as redim myarray (1 to foundfiles.count). The error
in your code below is that the redim refers to the wrong
letter (s/b n, not y) or that redim Y was not initalized
with dim y.

Robertw



-----Original Message-----
Just caught a typo.

In Excel 97 VBE, the following general module code

doesn't generate a compile
error.

'---- begin VBA ----
Option Explicit

Sub foo()
Dim n As Long
n = 5
ReDim y(1 To 5) '<- !!
MsgBox n
End Sub
'---- end VBA ----

Is the ReDim line an array variable declaration similar

to Dim, or a statement,
or a hybrid? Does this work the same in 2K and XP?

--
Never attach files.
Snip unnecessary quoted text.
Never multipost (though crossposting is usually OK).
Don't change subject lines because it corrupts Google

newsgroup archives.
.



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

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com