[AccessD] Where does WithEvents go?

John Colby jcolby at colbyconsulting.com
Fri Jun 6 07:56:25 CDT 2003


Bob,

Classes built directly in a library database are not visible outside of the
library in VBA.  No Se Por Que.  I guess that since Microsoft considers VBA
developers to be children, giving us such powers is considered dangerous -
kinda like playing with knives or matches I suppose.  At any rate, it
absolutely is possible to get your classes exposed such that they can be
seen and used outside of the library.

The easiest way to do this is to:

1) Export the class to a text file.
2) Open the class module with a text editor
3) Look for two attributes at the top of the module.  Change Creatable and
Exposed to True.
4) Save the class and close the text file.
5) In your library, click Insert / Class module
6) In the editor window that opens, click Insert / File.  Navigate to and
select the txt file that you saved the class in.  This will cause Access to
pull in the contents of whatever file you selected and insert it in your
class.  In this case it is the contents of the modified class.
7) At the top of the class you will see something like:

Option Compare Database
Option Explicit

VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
End
Option Compare Database
Option Explicit

Select and delete everything from the first Option down through the End.

8) Compile and save the class

The class will now be visible from any database that references your
library.
John W. Colby
www.colbyconsulting.com

  -----Original Message-----
  From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of Bob Bedell
  Sent: Friday, June 06, 2003 2:22 AM
  To: accessD at databaseadvisors.com
  Subject: [AccessD] Where does WithEvents go?


  I hope I can make this intelligible. Info on this issue seems a bit
sparse. I have a custom class and a form that work fine together. The class
declares a custom event using Public Event syntax in the general declaration
and Raise syntax in a method. The calling class (the form) declares a
private instance of the class using WithEvents and instantiates it. No
problems.



  Now I'm trying to import the class into a library (mda.) and set a
reference to it in the database that contains the calling form. It's my
understanding that my calling application can't instantiate the class
directly, and needs to use a wrapper function. So I added a standard module
to the calling application that calls a function in the library database
which returns a copy of the object. The calling database then has a public,
shared copy of the object to work with. The standard module in the calling
database is:



  Public g_oInventory As clsInventory



  Public Sub Startup()

      ' Get handles to shared objects

      Set g_objInventory = GetclsInventory



      DoCmd.OpenForm "frmInventory"

  End Sub



  The standard module in the library database (where the class is located)
is:



  Public Function GetclsInventory()

      Dim objInventory As clsInventory

      Set GetclsInventory = New clsInventory

  End Function



  Here's my problem. Using the library scenario, I can't find any place to
put my WithEvents statement. The old declaration (before seperating the
class and the form) was in the forms general declaration:



  Private WithEvents m_objProduct As clsInventory



   But now (library scenario) the declaration needs to be global, needs to
include WithEvents, and needs to be in a class or form module (WithEvents
won't work in a standard module).



  Should I do a VB ActiveX component instead? I'm kinda' at a loss here.
Real limited experience with classes/libraries stuff. Thanks to anyone who
can make heads or tails of that.



  Bob


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://databaseadvisors.com/pipermail/accessd/attachments/20030606/d4a743c0/attachment-0001.html>


More information about the AccessD mailing list