Thread: Help with array
View Single Post
  #2   Report Post  
Posted to microsoft.public.excel.programming
Rick Rothstein \(MVP - VB\) Rick Rothstein \(MVP - VB\) is offline
external usenet poster
 
Posts: 2,202
Default Help with array

The Dim statement is used by the compiler to carve out memory space for an
array (or variable) in advance... it can't do that if the number of elements
is a variable. To do what you want, you have to declare your array as a
dynamic array and then ReDim it the size you want.

Dim CurrArray() As Long
.....
.....
ArrayLength = MainPagepg.Range("I11").Value
......
' Anywhere within the proper scope, set the size this way
ReDim CurrArray(1 To ArrayLength)
......


Rick


"Karen53" wrote in message
...
Hi,

I seem to be missing something. I see examples where a variable is used
to
define an array. When I try it (below) I get a message it has to be a
constant. I would appreciate the guidance. I obviously don't understand
something.

Sub FindDupCurrent()

Dim Lusedrow As Long
Dim iCtr As Long
Dim ArrayCounter As Long
Dim ArrayLength As Long
Dim HasDups As Boolean
Dim Dupcount As Long

Lusedrow = MainPagepg.Cells(Rows.Count, "F").End(xlUp).Row
ArrayCounter = 0
ArrayLength = MainPagepg.Range("I11").Value
Dim CurrArray(1 To ArrayLength) As Long

With MainPagepg
For iCtr = 14 To Lusedrow 'Tenants begin on row 14
If .Range("B" & iCtr).Value = "Current" Then
If .Range("D" & iCtr).Value 0 Then
ArrayCounter = ArrayCounter + 1
CurrArray(ArrayCounter) = MainPagepg.Range("D" &
iCtr).Value
End If
End If
Next
End With

ArrayCounter = 1
iCtr = 0
HasDups = False
Dupcount = 0

For iCtr = 1 To ArrayLength
For ArrayCounter = 1 To ArrayLength
If CurrArray(iCtr) = CurrArray(ArrayCounter) Then
Dupcount = Dupcount + 1
End If
If Dupcount 1 Then
HasDups = True
End If
Next
Next

If HasDups = True Then
With MainPagepg.Range("D11")
.WrapText = True
.Font.ColorIndex = 3
.Font.Bold = True
.Value = "Duplicate Current Unit"
End With
End If

Erase CurrArray

End Sub

--
Thanks for your help.
Karen53