473,320 Members | 1,694 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

How to declare default method/property in Class module?

FishVal
2,653 Expert 2GB
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
Aug 18 '07 #1
6 9025
ADezii
8,834 Expert 8TB
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.
Expand|Select|Wrap|Line Numbers
  1. 'Declare a Class Variable
  2. Dim MyClass As clsTest
  3.  
  4. 'Instantiate the Class
  5. Set MyClass = New clsTest
  6.  
  7. 'Assignment to Value Property
  8. MyClass.Value = 123
  9.  
  10. Debug.Print MyClass ==> generates Runtime Error
  11. Debug.Print MyClass.Value ==> returns 123
Aug 18 '07 #2
ADezii
8,834 Expert 8TB
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).
Aug 18 '07 #3
FishVal
2,653 Expert 2GB
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
Aug 19 '07 #4
ADezii
8,834 Expert 8TB
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:
  1. Create the following simple Class named MyClass. MyClass will consist of just 2 Properties: Value (Default) and MyName. It does not contain any Methods.
    Expand|Select|Wrap|Line Numbers
    1. Private pValue As Long
    2. Private pMyName As String
    3.  
    4. Property Get Value() As Variant
    5.   Value = pValue
    6. End Property
    7.  
    8. Property Let Value(ByVal vNewValue As Variant)
    9.   pValue = vNewValue
    10. End Property
    11.  
    12. Property Get MyName() As Variant
    13.   MyName = pMyName
    14. End Property
    15.  
    16. Property Let MyName(ByVal vNewName As Variant)
    17.   pMyName = vNewName
    18. End Property
  2. Save your Class Module (MyClass) after creating it.
  3. From the File menu, choose Remove MyClass.
  4. When prompted to Export the File First, choose Yes and save the Module.
  5. Open the exported file (*.cls) in Notepad, or any Text Editor.
  6. 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.
    Expand|Select|Wrap|Line Numbers
    1. Attribute Value.VB_UserMemId = 0
  7. The Property Get Procedure should now look like the following:
    Expand|Select|Wrap|Line Numbers
    1. Property Get Value() As Variant
    2.   Attribute Value.VB_UserMemId = 0
    3.   Value = pValue
    4. End Property
  8. Save the file in Notepad, then exit.
  9. 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.
  10. The following code block will now work where it previously would not have because Value was not the Default Property of the MyClass Object.
    Expand|Select|Wrap|Line Numbers
    1. 'Declare a Variable to refer to the New Instance of
    2. 'MyClass (a MyClass Object)
    3. Dim clsMyClass As MyClass
    4.  
    5. 'Instantiate the Class
    6. Set clsMyClass = New MyClass
    7.  
    8. 'Can do this because Value is now the Default Property
    9. clsMyClass = 9999
    10.  
    11. 'Must use standard syntax since MyName is not a Default Property
    12. clsMyClass.MyName = "Fred Flintstone"
    13.  
    14. MsgBox clsMyClass           'returns 9999
    15. MsgBox clsMyClass.MyName    'returns Fred Flintstone
  11. The above code has been tested and is fully operational. To the best of my knowledge, it requires Access 2000 and above to work.
  12. Should you have any questions feel free to ask.
Aug 19 '07 #5
FishVal
2,653 Expert 2GB
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:
  1. Create the following simple Class named MyClass. MyClass will consist of just 2 Properties: Value (Default) and MyName. It does not contain any Methods.
    Expand|Select|Wrap|Line Numbers
    1. Private pValue As Long
    2. Private pMyName As String
    3.  
    4. Property Get Value() As Variant
    5.   Value = pValue
    6. End Property
    7.  
    8. Property Let Value(ByVal vNewValue As Variant)
    9.   pValue = vNewValue
    10. End Property
    11.  
    12. Property Get MyName() As Variant
    13.   MyName = pMyName
    14. End Property
    15.  
    16. Property Let MyName(ByVal vNewName As Variant)
    17.   pMyName = vNewName
    18. End Property
  2. Save your Class Module (MyClass) after creating it.
  3. From the File menu, choose Remove MyClass.
  4. When prompted to Export the File First, choose Yes and save the Module.
  5. Open the exported file (*.cls) in Notepad, or any Text Editor.
  6. 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.
    Expand|Select|Wrap|Line Numbers
    1. Attribute Value.VB_UserMemId = 0
  7. The Property Get Procedure should now look like the following:
    Expand|Select|Wrap|Line Numbers
    1. Property Get Value() As Variant
    2.   Attribute Value.VB_UserMemId = 0
    3.   Value = pValue
    4. End Property
  8. Save the file in Notepad, then exit.
  9. 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.
  10. The following code block will now work where it previously would not have because Value was not the Default Property of the MyClass Object.
    Expand|Select|Wrap|Line Numbers
    1. 'Declare a Variable to refer to the New Instance of
    2. 'MyClass (a MyClass Object)
    3. Dim clsMyClass As MyClass
    4.  
    5. 'Instantiate the Class
    6. Set clsMyClass = New MyClass
    7.  
    8. 'Can do this because Value is now the Default Property
    9. clsMyClass = 9999
    10.  
    11. 'Must use standard syntax since MyName is not a Default Property
    12. clsMyClass.MyName = "Fred Flintstone"
    13.  
    14. MsgBox clsMyClass           'returns 9999
    15. MsgBox clsMyClass.MyName    'returns Fred Flintstone
  11. The above code has been tested and is fully operational. To the best of my knowledge, it requires Access 2000 and above to work.
  12. 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. :)
Aug 19 '07 #6
ADezii
8,834 Expert 8TB
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.
Aug 19 '07 #7

Sign in to post your reply or Sign up for a free account.

Similar topics

1
by: Enigman O'Maly | last post by:
I'm trying to convert some VBA routines in an Excel 2000 workbook to use objects instead of global varaibles. I've defined a class module with the following (excerpts): (from SheetMetrics class...
2
by: Sergey Ilinsky | last post by:
Well, I've been working with JS for three years and have a great experience here. But! I still have no really acceptable answer to the following question: What is the principle difference between...
10
by: John Brock | last post by:
I have a base class with several derived classes (I'm writing in VB.NET). I want each derived class to have a unique class ID (a String), and I want the derived classes to inherit from the base...
5
by: Harold Hsu | last post by:
Hi all, What's the default access type of a property declared in an interface? The one I'm looking at is IBindingList: Public Interface IBindingList .... ReadOnly Property AllowEdit As...
44
by: gregory.petrosyan | last post by:
Hello everybody! I have little problem: class A: def __init__(self, n): self.data = n def f(self, x = ????) print x All I want is to make self.data the default argument for self.f(). (I
1
by: Stu | last post by:
Hi, Im using vis studio 2003 and I think wse is out of the question as clients could be using java which doesnt support it. So I managed to find some code which allows you to develop a custom...
15
by: esha | last post by:
I need to have a Public variable in my project. In VB it can be declared in a standard module. Where can I do it in C# ? I tried to do it in default class Program.cs and I tried it in an added by...
10
by: Brad Baker | last post by:
I have an asp.net/csharp application that requires a particular variable to work properly. This variable is usually passed via a query string in the URL when the application is first run but under...
0
ADezii
by: ADezii | last post by:
The motivation for this Tip was a question asked by one of our Resident Experts, FishVal. The question was: How to Declare Default Method/Property in a Class Module? My response to the question was...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
by: ryjfgjl | last post by:
ExcelToDatabase: batch import excel into database automatically...
1
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: Vimpel783 | last post by:
Hello! Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
0
by: ArrayDB | last post by:
The error message I've encountered is; ERROR:root:Error generating model response: exception: access violation writing 0x0000000000005140, which seems to be indicative of an access violation...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.