Article ID: 289664 - View products that this article applies to.
This article was previously published under Q289664
Moderate: Requires basic macro, coding, and interoperability skills.
This article applies to a Microsoft Access database (.mdb) and to a Microsoft Access project (.adp).
For a Microsoft Access 97 version of this article, see 182342For a Microsoft Access 2000 version of this article, see 202192
When you compile or run code, you may receive the following error message:
Compile Error: User-defined type not defined.
You are referring to an object in an object library that you do not have referenced.
You must add a reference to the object library that contains the object that you are using in code. To do so, follow these steps:
NOTE: This section references Microsoft DAO. DAO is not used in Microsoft Access projects (*.adp), but the same concepts regarding missing object libraries apply.
Not having a reference to the Microsoft DAO Object Library is one of the most common reasons for the error that is described in the "Symptoms" section of this article in Access databases (*.mdb). If the reference is missing, you may receive this error on many common DAO commands such as:
If you receive this error on a common DAO object, you must add the following reference:
Microsoft DAO 3.6 Object Library
Explicitly Declaring DAO and ADO ObjectsA common reference conflict occurs when you have references to both the Microsoft DAO Object Library (DAO) and the Microsoft ActiveX Data Objects Library (ADO). This is because these two libraries contain objects with the same name, such as Recordset. To avoid any compile errors in the case where you add another object library reference that uses the same object names, it is good practice to include "DAO." in the declaration of any DAO objects. Likewise, when declaring ADO objects, include "ADODB." in the declaration. The following example uses the Recordset object to illustrate this point:
Example 1: DAO ObjectsReference: Microsoft DAO 3.6 Object Library
Declaration: Dim myRecordset as DAO.Recordset
Example 2: ADO ObjectsReference: Microsoft ActiveX Data Objects 2.1 Library
Declaration: Dim myRecordset as ADODB.Recordset
NOTE: By explicitly declaring the object as ADODB or DAO, the position of the checked reference on the references list is not an issue.
Steps to Reproduce the Behavior
For more information about ActiveX Data Objects (ADO), in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type ActiveX Data Objects in the Office Assistant or the Answer Wizard, and then click Search to view the topic.