Exposing Class Module from VBA Excel 97 SR-2

H

hakim

I've created some class modules in an Excel 97 project (a unit testing
framework) which I would like to expose as a library to other projects
(the workbooks which I want to test).

From the advice I've read so far, I've created a factory module in the
library which returns objects:

Public Function TestManager() As TestManager
Set TestManager = New TestManager
End Function

which means that the calling code can do something like the following:

Option Explicit
Public Test As Object

Sub runTests()
Set Test = UnitTestFactory.TestManager ' defined in library project
Test.addSuite New QSheet_Test ' defined in this project
Test.run
End Sub

This works... but the main annoyance is that there are a large number
of methods used in the test fixtures, and as the library's class modules
(including TestManager) aren't exposed, the VBE can't prompt with all
the utility methods (AssertTrue etc.).

Sub run()
Test.AssertTrue 2 > 1
Test.AssertEquals 100, 100
Test.AssertNotEquals 100, "a sheep"
Test.AssertIsNotNothing SomeObjectRef
Test....
End Sub

This makes the library less friendly: and I want to minimize any
possible excuses to *not* unit test!

I've seen advice (mainly re Access) to Export and re-Import the .cls
file changing the line:

Attribute VB_Exposed = False
-> Attribute VB_Exposed = True

but this doesn't work for me. (When I export the class again, the
line has been reset to VB_Exposed = False).

Any suggestions gratefully received!

osfameron
--
 
C

Chip Pearson

You can change the instancing property of the class to PublicNotCreateable
and declare the variable as that class type rather the as Object. E.g.,

Dim Test As UnitTestFactory.TestManager


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com (e-mail address removed)
 
C

Chip Pearson

Oops, I forgot that Excel97 doesn't support PublicNotCreateable class
instancing. Ignore my reply.


--
Cordially,
Chip Pearson
Microsoft MVP - Excel
Pearson Software Consulting, LLC
www.cpearson.com (e-mail address removed)
 
O

osfameron

You can change the instancing property of the class to
PublicNotCreateable and declare the variable as that
class type rather the as Object. E.g.,

Dim Test As UnitTestFactory.TestManager

Chip,

Thanks: I remember seeing that same advice, but in Excel 97
SR 2 I can't see a way to change the instancing property doing
any of:

- in Properties window for class: only property is "(Name)"
- in VBAProject properties
- Option keyword?
- editing the .cls file out of desperation and changing the line
MultiUse = -1 to read PublicNotCreateable = -1

Thanks again!
osfameron
 

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