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

ID: Q198650


The information in this article applies to:

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


SYMPTOMS

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.


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.


RESOLUTION

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.


MORE INFORMATION

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

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


  2. Open a new blank form in Design view.


  3. On the View menu, click Code.


  4. Type the following function:


  5. 
    Option Compare Database
    Option Explicit
    
    Public Function ClassModuleTest()
      MsgBox "Hello"
    End Function 
  6. Save the form as ClassForm, and then close it.


  7. Close the database.


  8. Open the sample database Northwind.mdb.


  9. Open a new global module in Design view.


  10. On the Tools menu of the Visual Basic Editor, click References.


  11. In the References dialog box, click Browse.


  12. In the Add References dialog box, click Microsoft Access Databases (*.mdb) in the Files of type list.


  13. Click Class.mdb, and then click Open to add the database as a reference.


  14. Click OK to close the References dialog box.


  15. On the View menu, click Immediate Window.


  16. 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.


  17. Type the following function:


  18. 
    Public Function RunClassProc()
    Dim x
    x = [Class].Form_ClassForm.ClassModuleTest()
    End Function 
  19. Try to compile the procedure by clicking Compile Northwind on the Run menu. Note that you receive the following error message:


  20. Compile Error:

    Method or Data Member not Found.


REFERENCES

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.

Additional query words:


Keywords          : kberrmsg kbprg 
Version           : WINDOWS:2000
Platform          : WINDOWS 
Issue type        : kbprb 

Last Reviewed: August 9, 1999