Can we revisit the "Implements" statement??

C

ct60

Hello again -

I am using Excel 2002 SP3 and am working on a project involving collecting
data from 7-8 different sources with various col formats, etc. It would be
neat if I could use an interface to define some functions to do this task.
Each object would implement the same functions in a slightly different way.

So as a simplified example - I have an interface in a class module called
"iData" defined as the following:

class iData

Public Function foo(whichWS As Worksheet) As Variant


End Function

Public Sub boo(ws1 As Worksheet, ws2 As Worksheet)

End Sub

Then I have another class module called "clsDB_Data" defined as follows:

clsDB_Data

Implements iData

Public Function foo(whichWS As Worksheet) As Variant
Dim v As Variant

foo = v
End Function

Public Sub boo(ws1 As Worksheet, ws2 As Worksheet)
MsgBox "Hello World!", vbExclamation
End Sub


This looks right to me but when I compile I get the puzzling error message:

Object Module needs to implement 'foo' for interface 'iData'

This message points to the clsDb_Data module.

I'm confused!!

Can anyone explain what is not right about what I am doing? Seems to me
that I am inplementing foo in my derived class module.

Any insight would be greatly appreciated.

Thanks in advance,

Chris (ct60)
 
N

NickHK

You will find it easier to get VBA to generate the routine signatures for
you.
Because you are using Implements, it is not just case of copying the routine
form the iData, but you have to indicate the interface in the call as well.

After you have entered "Implements iData", go to the combo at the top left
of the code pane, where it says "Worksheet" if you are on a WS module.
Select iData, then select each of the routine from the right hand combo,
until you have all of the routine exposed by the interface.

You will notice that the signature are somewhat "special".

NickHK
 
C

ct60

Thanks Nick - that is extremely cool! It is a bit weird to have to do it
that way but I guess it is sort of a vb style way to achieve this.

The Microsoft documentation is very weak in this important area.

I really hope a lot of people see this answer because it is a great way to
make code much more OO.

Best Regards,

Chris
 
N

NickHK

Chris,
Yes, it's not advertised much in VBA, but it certainly has its uses, if you
have a suitable structure.
Depending how intend to use this, you can :
Suppose clsDB_Data, clsTH_Data, whatever Implement IData
Dim MyVar as IData
Set MyVar=New clsDB_Data
'..do something
Set MyVar=New clsTH_Data
'etc

NickHK
 

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