Question: Can't pass an Array to a class

C

Charles

Hello

I am struggling to pass an array to a class. Basically I defined the
class as follows:

Public xVar As Integer
Public Property Let AddtheStuff(TheStuff() As Integer)
Dim i As Integer
For i = LBound(TheStuff) To UBound(TheStuff)
xVar = xVar + TheStuff(i)
Next i
End Property


and I tested the array with the following procedure:

Sub TestTheObject()
Dim MyObject As TheObject
Set MyObject = New TheObject
Dim ArrVar(1 To 10) As Integer
Dim i As Integer
For i = 1 To 10
ArrVar(i) = 10 * i
Next i
MyObject.AddtheStuff = ArrVar
MsgBox MyObject.xVar
End Sub

I always end up with the same compilation error: can't assign an
array. Am I doing something wrong?

Thanks in advance for your help
Charles
 
P

Peter T

Hi Charles,

You can't assign an array to a Property. Instead of the property method pass
the array as an argument of a normal function. If you particularly want to
use the Property method try adapting something like this (untested)

change
Public Property Let AddtheStuff(TheStuff() As Integer)
to
Public Property Let AddtheStuff(TheStuff() As Integer, nValue as long)

change -
MyObject.AddtheStuff = ArrVar
to
MyObject.AddtheStuff(ArrVar) = 0 ' ie some value

In passing, there's no advantage to declaring As Integer vs As Long, quite
the contrary

Regards,
Peter T
 
C

Charles

Thanks for the quick answer. I am actually confronted to another bug.
What I would like to do is to load a range of data from a spreadsheet
into the class. If I declare in the function AddtheStuff the argument
as an array of double, it doesn't seem to work. It works however if
the argument is defined as a variant, but only if I don't plug the
data directly from the spreadsheet, i.e.:

If I do this:

MyObject.AddtheStuff S.Range("thedata").value2

I get a bug, but if I do

Dim Grab() as variant
Grab=S.Range("thedata").value2
MyObject.AddtheStuff Grab

it works

I suspect it has to do with the ability to pass an argument by
reference, but since we can't pass an array by value. But do you see
away to spare the additional instruction?

Charles
 
C

Charles

Actually found the answer myself. I was declaring Addthestuff(x() as
variant) instead of Assthestuff(x as variant) which works. Still don't
know why but the code behaves normally

Charles
 
P

Peter T

You are now using exactly what Jon suggested as an alternative, but note he
said "into a variant" which is not the same as declaring a variant array.

Regards,
Peter T
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top