How to declare default method/property in Class module?  | Expert | | Join Date: Jun 2007 Location: Israel
Posts: 2,584
| | |
Hi, everybody.
The thread title is actually the whole question. :)
Does anybody know how to declare default method/property in Class module if it is possible at all?
Any ideas/hints/links will be greatly appreciated.
Regards,
Fish
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,429
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by FishVal Hi, everybody.
The thread title is actually the whole question. :)
Does anybody know how to declare default method/property in Class module if it is possible at all?
Any ideas/hints/links will be greatly appreciated.
Regards,
Fish According to the documentation, if an Object has a Value Property, then this Property is the Default Value for the Object. If an Object does not have a Value Property, than that Object does not have a Default Value. On the down side, I actually tested this, and found I explicitly had to state the Value Property in order to reference it. - 'Declare a Class Variable
-
Dim MyClass As clsTest
-
-
'Instantiate the Class
-
Set MyClass = New clsTest
-
-
'Assignment to Value Property
-
MyClass.Value = 123
-
-
Debug.Print MyClass ==> generates Runtime Error
-
Debug.Print MyClass.Value ==> returns 123
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,429
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by FishVal Hi, everybody.
The thread title is actually the whole question. :)
Does anybody know how to declare default method/property in Class module if it is possible at all?
Any ideas/hints/links will be greatly appreciated.
Regards,
Fish Hello FishVal:
I have the correct response to your question. As soon as Mary gives me the OK, I'll be posting it as the Tip of the Week #25. I hope you don't mind sharing the answer with the rest of the world (LOL).
|  | Expert | | Join Date: Jun 2007 Location: Israel
Posts: 2,584
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by ADezii Hello FishVal:
I have the correct response to your question. As soon as Mary gives me the OK, I'll be posting it as the Tip of the Week #25. I hope you don't mind sharing the answer with the rest of the world (LOL). Thanks, thanks, thanks
I'm very intrigued. What is it supposed to be? Can't wait to see the post. LOL
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,429
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by FishVal Thanks, thanks, thanks
I'm very intrigued. What is it supposed to be? Can't wait to see the post. LOL Since you are so intrigued, I decided to post it now for your viewing pleasure. (LOL).
VBA does not give you a simple mechanism by which you can specify a Property to be the Default. VBA does, however, support Default Properties but you'll simply have to jump through several hoops to get there. The following steps will describe exactly how to create a Default Property in your Classes: - Create the following simple Class named MyClass. MyClass will consist of just 2 Properties: Value (Default) and MyName. It does not contain any Methods.
-
Private pValue As Long
-
Private pMyName As String
-
-
Property Get Value() As Variant
-
Value = pValue
-
End Property
-
-
Property Let Value(ByVal vNewValue As Variant)
-
pValue = vNewValue
-
End Property
-
-
Property Get MyName() As Variant
-
MyName = pMyName
-
End Property
-
-
Property Let MyName(ByVal vNewName As Variant)
-
pMyName = vNewName
-
End Property
- Save your Class Module (MyClass) after creating it.
- From the File menu, choose Remove MyClass.
- When prompted to Export the File First, choose Yes and save the Module.
- Open the exported file (*.cls) in Notepad, or any Text Editor.
- In Notepad, find your Property Get Procedure, in this case Value. Add the following line of code on a blank line immediately following the Property Get Statement.
- Attribute Value.VB_UserMemId = 0
- The Property Get Procedure should now look like the following:
- Property Get Value() As Variant
-
Attribute Value.VB_UserMemId = 0
-
Value = pValue
-
End Property
- Save the file in Notepad, then exit.
- In VBA choose Import File and select the file you just modified (MyClass.cls). You will not see the 'Attribute' Statement in the VBA Editor. The Editor reads and processes Attribute Statements, but does not display them, nor does it allow them to be entered in the Editor.
- The following code block will now work where it previously would not have because Value was not the Default Property of the MyClass Object.
- 'Declare a Variable to refer to the New Instance of
-
'MyClass (a MyClass Object)
-
Dim clsMyClass As MyClass
-
-
'Instantiate the Class
-
Set clsMyClass = New MyClass
-
-
'Can do this because Value is now the Default Property
-
clsMyClass = 9999
-
-
'Must use standard syntax since MyName is not a Default Property
-
clsMyClass.MyName = "Fred Flintstone"
-
-
MsgBox clsMyClass 'returns 9999
-
MsgBox clsMyClass.MyName 'returns Fred Flintstone
- The above code has been tested and is fully operational. To the best of my knowledge, it requires Access 2000 and above to work.
- Should you have any questions feel free to ask.
|  | Expert | | Join Date: Jun 2007 Location: Israel
Posts: 2,584
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by ADezii Since you are so intrigued, I decided to post it now for your viewing pleasure. (LOL).
VBA does not give you a simple mechanism by which you can specify a Property to be the Default. VBA does, however, support Default Properties but you'll simply have to jump through several hoops to get there. The following steps will describe exactly how to create a Default Property in your Classes: - Create the following simple Class named MyClass. MyClass will consist of just 2 Properties: Value (Default) and MyName. It does not contain any Methods.
-
Private pValue As Long
-
Private pMyName As String
-
-
Property Get Value() As Variant
-
Value = pValue
-
End Property
-
-
Property Let Value(ByVal vNewValue As Variant)
-
pValue = vNewValue
-
End Property
-
-
Property Get MyName() As Variant
-
MyName = pMyName
-
End Property
-
-
Property Let MyName(ByVal vNewName As Variant)
-
pMyName = vNewName
-
End Property
- Save your Class Module (MyClass) after creating it.
- From the File menu, choose Remove MyClass.
- When prompted to Export the File First, choose Yes and save the Module.
- Open the exported file (*.cls) in Notepad, or any Text Editor.
- In Notepad, find your Property Get Procedure, in this case Value. Add the following line of code on a blank line immediately following the Property Get Statement.
- Attribute Value.VB_UserMemId = 0
- The Property Get Procedure should now look like the following:
- Property Get Value() As Variant
-
Attribute Value.VB_UserMemId = 0
-
Value = pValue
-
End Property
- Save the file in Notepad, then exit.
- In VBA choose Import File and select the file you just modified (MyClass.cls). You will not see the 'Attribute' Statement in the VBA Editor. The Editor reads and processes Attribute Statements, but does not display them, nor does it allow them to be entered in the Editor.
- The following code block will now work where it previously would not have because Value was not the Default Property of the MyClass Object.
- 'Declare a Variable to refer to the New Instance of
-
'MyClass (a MyClass Object)
-
Dim clsMyClass As MyClass
-
-
'Instantiate the Class
-
Set clsMyClass = New MyClass
-
-
'Can do this because Value is now the Default Property
-
clsMyClass = 9999
-
-
'Must use standard syntax since MyName is not a Default Property
-
clsMyClass.MyName = "Fred Flintstone"
-
-
MsgBox clsMyClass 'returns 9999
-
MsgBox clsMyClass.MyName 'returns Fred Flintstone
- The above code has been tested and is fully operational. To the best of my knowledge, it requires Access 2000 and above to work.
- Should you have any questions feel free to ask.
Wow! Excellent.
ADezii you are great. Many thanks.
To tell the truth, I was almost sure that VBA doesn't allow this. "Almost", bkz I couldn't believe it. :)
|  | Expert | | Join Date: Apr 2006 Location: Philadelphia
Posts: 5,429
| | | re: How to declare default method/property in Class module? Quote:
Originally Posted by FishVal Wow! Excellent.
ADezii you are great. Many thanks.
To tell the truth, I was almost sure that VBA doesn't allow this. "Almost", bkz I couldn't believe it. :) Just in case you're interested, Tip #25 has been posted. I hope you didn't mind the fact that I mentioned your name as the motivation for this Tip. Take care.
|  | Similar Microsoft Access / VBA bytes | | | Forums
Visit our community forums for general discussions and latest on Bytes
/bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 229,155 network members.
|