Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 66
Default Avoiding duplication in objects with large commonality

I am implementing an object structure which consists of a number of
objects and each of those objects should be accessed via a collection
class. For example:

Joints.Item("JointName").JointProperties
Pipes.Item("PipeName").PipeProperties
etc.

The properties in each of the collection classes are always very
similar - consisting of .Count and .Item (which returns a pointer to
the child object).
At the moment I have created a new class for each of the collections
and duplicated the collection code in each. This seems quite
inefficient and prone to mistakes if I ever decide to make a change to
the way I deal with collection objects.

Is there any neater way of doing this? I'm not sure whether I can do
anything with the "Implements" keyword but it looks like this is more
for creating a common interface rather than common base code.

Thanks a lot for your time,
Andrew
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 593
Default Avoiding duplication in objects with large commonality

(Andrew) wrote ...

I am implementing an object structure which consists of a number of
objects and each of those objects should be accessed via a collection
class.

I'm not sure whether I can do
anything with the "Implements" keyword but it looks like this is more
for creating a common interface rather than common base code.


VBA supports polymorphism via Implements whereas you are looking for
more traditional inheritance which VBA does not support. I have a
standard collection class 'template' from which I change the class
name each time. And, because I have the usual default member and
NewEnum frigs, I have to do this in a text editor else risk losing
them.

In case that last comment made no sense you can 'neaten' your syntax
to

Joints("JointName").JointProperties
Pipes("PipeName").PipeProperties
etc

by making Item the default member of the class. Because this Attribute
property is invisible in VBA, you have to export the class module to a
file, open it in a text editor (e.g. Notepad) and add the magic line:

Public Property Get Item(ByVal Index As Variant) As CColumn
Attribute Item.VB_UserMemId = 0 ' <<<<< magic line
Set Item = m_colColumns.Item(Index)
End Property

(note must be Public - not Friend - and the keyword 'Item' in the
magic line must match the procedure name). While in the text editor,
you may as well add the following, which contains *two* magic lines:

Public Property Get NewEnum() As IUnknown
Attribute NewEnum.VB_UserMemId = -4
Attribute NewEnum.VB_MemberFlags = "40"
Set NewEnum = m_colColumns.[_NewEnum]
End Property

The above allows a For Each loop to be performed on the collection
class. Save in the text editor and re-import the class to the VBA
project.

Jamie.

--
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Avoiding #N/A Heather Excel Discussion (Misc queries) 4 August 25th 09 08:41 PM
Avoiding #value MicroMain Excel Worksheet Functions 2 January 25th 06 05:11 AM
Avoiding #NUM! Bruno Campanini Excel Worksheet Functions 9 September 14th 05 02:34 PM
return most frequent objects/numbers in large worksheet? trav Excel Worksheet Functions 3 August 12th 05 11:02 AM
Unable to remove Sheet objects in the Microsoft Excel Objects Adrian[_7_] Excel Programming 1 August 26th 04 10:49 PM


All times are GMT +1. The time now is 04:00 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"