ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   User defined type problem (https://www.excelbanter.com/excel-programming/299466-user-defined-type-problem.html)

R Avery

User defined type problem
 
I have a public User defined type that i would like to use throughout my
code. I have put it in a module.


However, when I have a class that contains a scripting.dictionary of
these types return the Type in a function, I get the following error:

"Only public user defined types defined in public object modules can be
used as parameters or return types for public procedures of class
modules or as fields of public user defined types"


Then, when I try to put the public type definition in the class module,
it complains:

"Cannot define a Public user-defined type within an object module"


What is going on? How can I get around this? It seems as though the
errors are saying two contradictory things. Any help would be most
appreciated.

R Avery

User defined type problem
 
I'm afraid I didn't say exactly what i meant. To clear up all
confusion, the code is below.

The problem occurs when I want to store many of these Types in a
Collection or Dictionary. The compiler complains about various things,
depending on where and what scope the Type is defined with.

Basically, I want to store a LOT of MyType records in a dictionary so
that I can immediately summon on by Key. If I cannot do this directly,
I guess an alternative would be to store them in an array, and store the
keys and array indices in a dictionary. However, this is a little less
intuitive and natural, and a lot more annoying. Any help would be
appreciated.


################################################
Module code
################################################


Type MyType
Item1 As String * 6
Item2 As Double
End Type

################################################
Class Module code
################################################





Private colItems As Collection


Private Sub Class_Initialize()
Set colItems = New Collection
End Sub

Public Sub Add(ByRef WhichItem As MyType)
colItems.Add WhichItem
End Sub

Public Function Item(ByVal Index As Long) As MyType
Item = colItems.Item(Index)
End Function





All times are GMT +1. The time now is 03:27 AM.

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