Call the property of a class using a variable

R

Rob Wills

I'm sure this is possible.

I have written a class module which contains a number of properties.

I wish to change the value of one of the properties, however I want to
dynamically identify the property that I'm changing

For example: if my class has integer properties of X and Y I wish to be able
to do somthing similar to below

========================================
Function Change_Value(strProperty as String, iValue as Integer)
Dim objClass As myClass

Set objClass = New myClass

objclass(strproperty) = iValue

End Function
=========================================

Thanks in Advance
Rob
 
J

Jim Thomlinson

You can do it but it is a bit of a brute force attack... Define our get and
let to take a string argument and then you can use a select case to evaluate
the string input to determine the appropriate property...

Function Change_Value(strProperty as String, iValue as Integer)
Dim objClass As myClass

Set objClass = New myClass

objclass.LetVariableProperty(strproperty) = iValue

End Function
 
B

Bob Phillips

Function Change_Value(strProperty As String, iValue As Integer)
Dim objClass As MyClass

Set objClass = New MyClass

CallByName objClass, strProperty, VbLet, iValue

End Function
 
P

Peter T

I can't imagine ever doing this (other ways) but as you ask

' code in normal module

Dim c As Class1

Function foo(sProp As String, LetGet As VbCallType, arg) As Long

If c Is Nothing Then Set c = New Class1

If LetGet = VbLet Then
CallByName c, sProp, LetGet, CLng(arg)
ElseIf LetGet = VbGet Then
foo = CallByName(c, sProp, LetGet)
End If

End Function

Sub test()
arrProps = Array("PropA", "PropB")
arrvals = Array(100&, 200&)

For i = 0 To 1
foo CStr(arrProps(i)), VbLet, arrvals(i)
Next

For i = 0 To 1
Debug.Print foo(CStr(arrProps(i)), VbGet, a)
Next

Set c = Nothing
End Sub
''''''' end normal module

''''' code in Class1

Dim x As Long
Dim y As Long

Public Property Let propA(n As Long)
x = n
End Property
Public Property Get propA() As Long
propA = x
End Property

Public Property Let propB(n As Long)
y = n
End Property
Public Property Get propB() As Long
propB = y
End Property

''''' end Class1

Regards,
Peter T
 
J

JMB

At one time, he was working on a paper regarding the use of class modules. I
think he got sidetracked or was just teasing me <g>
 
B

Bob Phillips

You are absolutely right, on both counts. I was/am working on it, and I got
sidetracked. The hardest part is getting a meaningful case to build a class
upon. Although I use them extensively, I need to find a custom object that
will ring a bell with the target audience. Most people use the ubiquitous
person class, which I think falls far short of the mark.

But I must admit that I had not intended to introduce CallByName within that
paper, I never use it, and I don't see much use for it personally.
 
J

JMB

When I began learning about classes, I attempted a sudoku puzzle. I figured
it offered opportunities to learn custom classes, events, and parent child
relationships. But I got sidetracked and never finished it <g>. I've never
really found a lot of practical uses for custom classes in my work (or I'm
not using enough imagination), so my interest is mostly academic at this
point.
 

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