ACC: Error Message "Method or Data Member not Found"

ID: Q151572

The information in this article applies to:

SYMPTOMS

Advanced: Requires expert coding, interoperability, and multiuser skills.

When you compile a module in which a procedure is trying to call a procedure that is defined in a class module in another database, you may receive the following error message:

   Method or Data Member not Found.

CAUSE

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.

This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to your version of the "Building Applications with Microsoft Access" manual.

RESOLUTION

You can use one of the following two methods to work around this behavior.

Method 1

Store the procedure in a standard module rather than a class module. This would make the procedure directly accessible from other databases but would require 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 would call the procedure from the class module. Then, you would call this function from a standard module of another database. This allows you to leave your class module procedures as is, but would require that you write a standard procedure for each class module procedure you want to run.

MORE INFORMATION

Although its not possible to directly call a procedure defined in a class module of another database from procedures outside of that database, you may notice that it is possible to call them from the Debug window. This is because Visual Basic for Applications relaxes privacy rules and scope restrictions in the Debug window to aid in debugging Visual Basic procedures.

Steps to Reproduce Behavior

 1. Start Microsoft Access and create a new database called Class.MDB.

 2. Open a new blank form in Design view.

 3. Click Code on the View menu to view the form's module.

 4. Create the following function:

       Option Compare Database
       Option Explicit

       Public Function ClassModuleTest()
          MsgBox "Hello"
       End Function

 5. Save and close the form as ClassForm.

 6. Close the database.

 7. Open the sample database Northwind.mdb.

 8. Open a new global module in Design view.

 9. On the Tools menu, click References.

10. In the References dialog box, click the Browse button to browse for a
    new reference.

11. In the Add References dialog box, under Files OF Type, select
    Databases.

12. Select the Class.MDB database, and click OK to add it as a reference.

13. Click OK to close the References dialog box.

14. On the View menu, click Debug Window to open the Debug Window.

15. Type the following line in the Debug window, and then press ENTER:

    In Microsoft Access 97:

       ? [Class].Form_ClassForm.ClassModuleTest()

    In Microsoft Access 7.0:

       ? [Class.MDB].Form_ClassForm.ClassModuleTest()

    Note that the procedure runs and the "Hello" message box is displayed.

16. Create the following function:

    In Microsoft Access 97:

       Public Function RunClassProc()
       Dim x
       x = [Class].Form_ClassForm.ClassModuleTest()
       End Function

    In Microsoft Access 7.0:

       Public Function RunClassProc()
       Dim x
       x = [Class.MDB].Form_ClassForm.ClassModuleTest()
       End Function

17. Try to compile the procedure by clicking Compile Loaded Modules
    on the Run menu. Note that you receive the following error message:

       Method or Data Member not Found.

REFERENCES

For more information about creating references to other databases, search the Help Index for "Referencing, Other Databases," or ask the Microsoft Access 97 Office Assistant.

For more information about class modules, search the Help Index for "Class Modules," or ask the Microsoft Access 97 Office Assistant.

Additional query words:

Keywords          : kberrmsg kbprg
Version           : 7.0 97
Platform          : WINDOWS
Hardware          : x86
Issue type        : kbprb

Last Reviewed: November 20, 1998