User-defined type collection in class module

R

Rob

I am trying to build a class module that has, among other things, a
collection consisting of items of a user-defined type. VBA is not
cooperating. Let say the type declaration is:

[Private?] Type ItemData
name as String
data1 as double
data2 as double
End Type

In the class module, I set up a collection:

Dim myCollection as New Collection

I want a method to add to the collection, so in the class module:

Sub addItem(nm as String, d1 as Double, d2 as Double)
dim item as ItemData

item.name = nm
item.data1 = d1
item.data2 = d2

myCollection.Add (item)
End Sub

If I put the type declaration in the class module w/o the "Private", an
error says I cannot define a Public user-defined type in an object
module.
If I do use "Private", or if I put the type declaration into a standard
module, it then says that only user-defined type defined in public
object modules can be passed to late-bound functions (is this what is
happening, since I'm using a Collection?)

Can this be done? If so, what's the trick? Any help is appreciated!
 
W

witek

Rob said:
I am trying to build a class module that has, among other things, a
collection consisting of items of a user-defined type. VBA is not
cooperating. Let say the type declaration is:

[Private?] Type ItemData
name as String
data1 as double
data2 as double
End Type

In the class module, I set up a collection:

Dim myCollection as New Collection

I want a method to add to the collection, so in the class module:

Sub addItem(nm as String, d1 as Double, d2 as Double)
dim item as ItemData

item.name = nm
item.data1 = d1
item.data2 = d2

myCollection.Add (item)
End Sub

If I put the type declaration in the class module w/o the "Private", an
error says I cannot define a Public user-defined type in an object
module.
If I do use "Private", or if I put the type declaration into a standard
module, it then says that only user-defined type defined in public
object modules can be passed to late-bound functions (is this what is
happening, since I'm using a Collection?)

Can this be done? If so, what's the trick? Any help is appreciated!

define ItemData as public in standard module.
 
R

Rob

witek said:
Rob said:
I am trying to build a class module that has, among other things, a
collection consisting of items of a user-defined type. VBA is not
cooperating. Let say the type declaration is:

[Private?] Type ItemData
name as String
data1 as double
data2 as double
End Type

In the class module, I set up a collection:

Dim myCollection as New Collection

I want a method to add to the collection, so in the class module:

Sub addItem(nm as String, d1 as Double, d2 as Double)
dim item as ItemData

item.name = nm
item.data1 = d1
item.data2 = d2

myCollection.Add (item)
End Sub

If I put the type declaration in the class module w/o the "Private", an
error says I cannot define a Public user-defined type in an object
module.
If I do use "Private", or if I put the type declaration into a standard
module, it then says that only user-defined type defined in public
object modules can be passed to late-bound functions (is this what is
happening, since I'm using a Collection?)

Can this be done? If so, what's the trick? Any help is appreciated!

define ItemData as public in standard module.

Hmm. I've tried that, and it returns the same error:

"Only user-defined types defined in public object models can be coerced
to or from a variant or passed to late-bound functions"

I'm actually not sure what this error is saying. I suspect it's
because I'm using a collection, but I can't say for sure.
 

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