Class Module

B

Bill Martin

How does one share a class module among XLS files? I can share macros for
example by storing them in Personal.xls or by creating a VBAProject reference to
the file which contains the code. I presume there's a way to share the code in
a class module short of replicating the module it in every xls file?

I've tried putting the code in a class module contained within a Library.xls
file that's already referenced but when I try to use the class code I get an
error that the user-defined type is not defined. It works though if I replicate
the class module in every XLS file that wants to use it.

Plainly I'm missing something.

Thanks...

Bill
 
C

Chip Pearson

You can't directly share a class module between projects. You
can, however, have a public function in the workbook that
contains the class that returns as its result a new instance of
the class. For example, suppose WB1.xls has a project name of
MyProj and a class named CMyClass.

Then, set a reference from WB2.xls to WB1.xls (in VBA go to the
Tool menu, choose References, and check MyProj). Then in a code
module in WB1.xls, create a function

Public Function GetClass As CMyClass
Set GetClass = New CMyClasss
End Function

In WB2.xls, instantiate the class with code like

Public Sub AAA()
Dim C As MyProj.CMyClass
Set C = MyProj.GetClass
' more code
End Sub

Ensure that the Instancing Property of the Class is
PublicNotCreatable, not Private.

--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com
 
B

Bill Martin

That was not what I expected. Thanks for pointing me in this direction Chip.
I'll tinker with it a bit to make sure I fully understand your meaning, but it
sounds good to me.

Thanks.

Bill
 
T

tony h

It is perfectly possible to reference the class module

1. the class needs to be defined as publinotcreatable.
2. it is worth renaming the VBA section from the standard ie no
VBAProject but maybe VBAGlobalClasses
3. you need to reference the workbook containing the Classmodule fro
the workbook where you want to use it. this is done using th
tools/reference in VBA screens.
4. now you should be able to reference the class module directly suc
as dim x as vbaglobalclasses.myclass

hope this help
 
C

Chip Pearson

Tony,

This isn't completely accurate. Though your steps are correct,
you still won't be able to create an instance of the class from
the calling workbook. You need a procedure in the project
containing the class to instantiate the class.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com


"tony h" <[email protected]>
wrote in message
news:[email protected]...
 
T

tony h

I think I would call that a clarification rather than an inaccuracy. Bu
maybe that's because I am on a train wending my way home with a glas
(or to be accurate - the remains of a bottle) of wine after a rathe
nice steak.

Have fun. I always enjoy your contributions
 
B

Bill Martin

I managed to get to this late today, and it worked very nicely. Thanks for your
assistance.

Bill
 

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