Class modules: parametrize class object fields

J

Jean-Pierre Bidon

Hi,
My question concerns class object fields.
To be more specific, let assume I defined an object "myclass" and an
instance "myobj".
Set myobj = New myclass
Let assume too that this object has 2 fields: "myfld1" and "myfld2".
In other respects, I have a string variable {stfld} that is equal either to
"myfld1" or to "myfld2".
Is it possible to get the value of myobj(stfld), with a syntax similar to
DAO with Access ?
I know that the previous syntax doesn't work, so my question is : does it
exist an indirect (roundabout) way to do it ?
Thanks for your help.

--
Jean-Pierre Bidon
Interstat
5 place de la République
75003 Paris
Tél: 01 45 49 19 17
 
N

NickHK

Jean-Pierre,
Your terminology is a little confusing.
In a class, you would normally talk about properties, methods, events etc.
So following the description below, something like

private m_myfld1 as string
private m_myfld2 as string
Public property Let myfld1 (vData as string)
m_myfld1=vdata
end property

Public property Get myfld1 as string
myfld1=m_myfld1
end property

If myobj.myfld1=stfld Then
...
ElseIf myobj.myfld2=stfld Then
...

Is that what you mean ?

Otherwise maybe you need to look in using a Collection "myfld" objects and
"stfld" is the key (if a string) or the index (if numeric).

NickHK
 
R

Robert Bruce

Roedd said:
Jean-Pierre,
Your terminology is a little confusing.
In a class, you would normally talk about properties, methods, events
etc.

Nick,

In some circles (traditional C programmers, I think) object properties are
often called 'Fields'. I think what the OP is after is soemthing like a
Properties collection for an object so that property values can be retrieved
by name. Presumably the Properties property could be made the default so
that it wouldn not have to be explicitly called.

Using an Excel analogy, imagine that a Worksheet object had a properties
collection. Then, as well as returning the name of the sheet by calling the
Name property (RetVal = Worksheets(1).Name), you could call the Properties
property (RetVal = Worksheets(1).Properties("Name") - or, if the Properties
property was the default, RetVal = Worksheets(1)("Name")).

At least I think that's what's required.

Rob
 
R

Robert Bruce

Roedd said:
At least I think that's what's required.

I've just taken a look at this.

Say we have a simple class called Class1:

Option Explicit

Private m_strName As String

Public Property Get Name() As String
Name = m_strName
End Property

Public Property Let Name(ByVal strName As String)
m_strName = strName
End Property

'We can use callByName to provide a Properties property:

Public Property Get Properties(Name As String) As Variant
Dim varRet As Variant
varRet = CallByName(Me, Name, VbGet)
Properties = varRet
End Property

Now use a simple bas module to test:

Option Explicit

Sub test()

Dim o As New Class1

o.Name = "Hello World"

MsgBox o.Properties("Name")

End Sub

This seems to work fine. I'll leave all of the validation and error checking
as an exercise for the reader ;-)

Rob
 
B

Bob Phillips

Nice! I am struggling to think of a use for it, but it is a good technique.

--
HTH

Bob Phillips

(replace somewhere in email address with gmail if mailing direct)
 
J

Jean-Pierre Bidon

Thank you for your answer.
Sorry, I was not clear. Your answer was not what I looked for.
I'll try to formulate it again with hopefully the right terminology.
I defined a class modul "myclass" and an instance "myobj".
Set myobj = New myclass
Let assume too that this class has 2 properties: "myfld1" and "myfld2".
In other respects, I have a string variable {stfld} that is equal either to
"myfld1" or to "myfld2".
Is it possible to get (resp. set) the value of the parametrized expression
myobj.{stfld} (syntax ??), that would be equal to :
- myobj.myfld1 if stfld="myfld1"
- myobj.myfld2 if stfld="myfld2"
Does it exist a way (either direct or indirect) to do it ?
Thanks for your help.
 
N

NickHK

Sounds like you are looking for something like Robert's CallByName
suggestion.

NickHK
 
P

Peter T

Doesn't the excellent suggestion posted by Robert Bruce do what you want.
Adapting his example the syntax might be something like

= myobj.Properties(stfld)

Regards,
Peter T
 
J

Jean-Pierre Bidon

The synatx "= myobj.Properties(stfld)" looks promising, unfortunately it is
not accepted by Excel.
 
B

Bob Phillips

I think he means without the = Jean-Pierre.

--
HTH

Bob Phillips

(replace somewhere in email address with gmail if mailing direct)
 
P

Peter T

I assumed the return value would be assigned to something, perhaps an
appropriately declared variable, eg

myString = myobj.Properties(stfld)

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