When you compile a module that has a procedure which tries to call another
procedure that is in a class module in another database, you may receive the following error message:
Method or Data Member not Found.
↑ Back to the top
Class modules are private in scope to the Visual Basic project in the
database in which they are defined; therefore, procedures in class modules
cannot be referenced in another Visual Basic project.
↑ Back to the top
Use one of the following two methods to work around this behavior.
Method 1
Store the procedure in a standard module rather than in a class module. This makes the procedure directly accessible from other databases but requires that you convert your class module procedures to standard module procedures.
Method 2
Create a function in a standard module in the database where the class
module is defined. This function calls the procedure from the class
module. Then, you call this function from a standard module of another database. This allows you to leave your class module procedures as
they are, but requires that you write a standard procedure for each class
module procedure that you want to run.
↑ Back to the top
Although you cannot directly call a procedure defined in a class
module of another database from procedures outside of that database, you
may notice that you can call them from the Immediate window. The reason for this is that Visual Basic for Applications relaxes privacy rules and scope restrictions in the Immediate window to aid in debugging procedures.
Steps to Reproduce Behavior
-
Start Microsoft Access and create a new database called Class.mdb.
- Open a new blank form in Design view.
- On the View menu, click Code.
- Type the following function:
Option Compare Database
Option Explicit
Public Function ClassModuleTest()
MsgBox "Hello"
End Function
- Save the form as ClassForm, and then close it.
- Close the database.
- Open the sample database Northwind.mdb.
- Open a new global module in Design view.
- On the Tools menu of the Visual Basic Editor, click References.
- In the References dialog box, click Browse.
- In the Add References dialog box, click Microsoft Access Databases (*.mdb) in the Files of type list.
- Click Class.mdb, and then click Open to add the database as a reference.
- Click OK to close the References dialog box.
- On the View menu, click Immediate Window.
- Type the following line in the Immediate window, and then press ENTER:
? [Class].Form_ClassForm.ClassModuleTest()
Note that the procedure runs and the "Hello" message box is displayed.
- Type the following function:
Public Function RunClassProc()
Dim x
x = [Class].Form_ClassForm.ClassModuleTest()
End Function
- Try to compile the procedure by clicking Compile Northwind on the Run menu. Note that you receive the following error message:
Compile Error:
Method or Data Member not Found.
↑ Back to the top
For more information about creating references, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type references property in the Office Assistant or the Answer Wizard, and then click Search to view the topic.
For more information about class modules, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type class modules in the Office Assistant or the Answer Wizard, and then click Search to view the topic.
↑ Back to the top