Wrox Programmer Forums
Go Back   Wrox Programmer Forums > Microsoft Office > Access and Access VBA > Access VBA
Access VBA Discuss using VBA for Access programming.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the Access VBA section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
Old March 15th, 2011, 05:26 PM
Authorized User
Join Date: Mar 2011
Posts: 13
Thanks: 0
Thanked 1 Time in 1 Post
Default Trouble Compiling VBA after Using Interfaces

All right, I was reading through the Access 2010 Programmers Reference, which I have been enjoying, by the way, and started playing around with interfaces and "Object Oriented Programming". OOP being a prior interest of my own, this seemed natural.

Anyways, after all sorts of trouble I was able to produce a working version of a group of interfaces and classes that mimic enumeration values on other languages. It works when I use them in an access application, but when I try to compile the database, I get this error: "User-defined Type Not Defined"
I wasn't going to post the code for length issues, but here is the code for the interface and implimentation (there is an enum and two helper functions used as well) and try to make it as short as possible.

Here is the interface IEnumPlus
Option Compare Database
Option Explicit

'Size of the Enum
Public Property Get Size() As Long
End Property

'Array with all the accessible enum values. Should be dynamically created on object initialization
Public Property Get Values() As Collection
End Property

'The name of the enum value
Public Function Name(eVal As Long) As String
End Function

'The name of all the values in the enumueration, also created on initialization
Public Property Get Names() As Collection
End Property

'Label of enum value as needed to be seen by the user
Public Function Label(eVal As Long) As String
End Function

'Initialized array of all user labels
Public Property Get Labels() As Collection
End Property

Public Property Let UT(eVal As utUserType)
End Property

Public Property Get UT() As utUserType
End Property

Public Property Get UTLong() As Long
End Property

Public Property Let UTString(sVal As String)
End Property
And here is the implementation:

Option Compare Database
Option Explicit

Implements IEnumPlus

Private eValues As New Collection
Private nValues As New Collection
Private labValues As New Collection

Private inUT As utUserType

Private Sub Class_Initialize()
    Dim aCount As Integer
    For aCount = 0 To 10
        eValues.Add (2 ^ aCount)
        nValues.Add IEnumPlus_Name(eValues.Item(aCount + 1))
        labValues.Add IEnumPlus_Label(eValues.Item(aCount + 1))
    Next aCount
End Sub

Public Property Get IEnumPlus_Size() As Long
    IEnumPlus_Size = 11
End Property

Public Property Get IEnumPlus_Values() As Collection
    Set IEnumPlus_Values = eValues
End Property

Public Function IEnumPlus_Name(eVal As Long) As String
    IEnumPlus_Name = UserType.UTName(eVal)
End Function

Public Property Get IEnumPlus_Names() As Collection
    Set IEnumPlus_Names = nValues
End Property
Public Function IEnumPlus_Label(eVal As Long) As String
    IEnumPlus_Label = UTLabel(eVal)
End Function

Public Property Get IEnumPlus_Labels() As Collection
    Set IEnumPlus_Labels = labValues
End Property

Public Property Let IEnumPlus_UT(eVal As utUserType)
    inUT = eVal
End Property

Public Property Get IEnumPlus_UT() As utUserType
    UT = inUT
End Property

Public Property Get IEnumPlus_UTLong() As Long
    UTLong = CLng(inUT)
End Property

Public Property Let IEnumPlus_UTString(sVal As String)
    Select Case sVal
        Case UT1NAME, UT1LABEL
            inUT = utREAD_LIMITED
        Case UT2NAME, UT2LABEL
            inUT = utREAD_LIMITED2
        Case UT4NAME, UT4LABEL
            inUT = utREAD_ONLY
        Case UT8NAME, UT8LABEL
            inUT = utSTANDARD
        Case UT16NAME, UT16LABEL
            inUT = utSTANDARD2
        Case UT32NAME, UT32LABEL
            inUT = utSTANDARD3
        Case UT64NAME, UT64LABEL
            inUT = utPOWER_USER
        Case UT128NAME, UT128LABEL
            inUT = utPOWER_USER2
        Case UT256NAME, UT256LABEL
            inUT = utMANAGEMENT
        Case UT512NAME, UT512LABEL
            inUT = utMANAGEMENT2
        Case UT1024NAME, UT1024LABEL
            inUT = utDEVELOPER
    End Select
End Property
Is there something I have done wrong, or something I could do to get this to compile properly?
Old March 31st, 2011, 08:50 AM
gjgriffith's Avatar
Wrox Author
Join Date: Jul 2009
Posts: 110
Thanks: 5
Thanked 14 Times in 14 Posts
Default Make Sure Your Code is in Access Code Modules

Hello drexasaurus,

I saw your post about "Trouble Compiling VBA after Using Interfaces" when using the Implements VBA Keyword in your Access VBA Modules...and I think I know what the problem might be. Be sure to put both of these sets of code in an Access VBA "Class Module" (and not a regular module). Otherwise, you will get the error message:

"Only valid in object module"

When trying to compile your Access Database Application. Anyway, that is my guess, but if that is not the case and you are still having problems, please let me know!

Also, thanks for the GREAT feedback on the Access 2010 Programmer's Reference, I'm glad you have found it useful! We always love to hear the feedback !

Good luck,

Geoffrey L. Griffith

Wrox Author of:
Access 2010 24-Hour Trainer
Access 2010 Programmer's Reference
Access 2007 VBA Programmer's Reference

Similar Threads
Thread Thread Starter Forum Replies Last Post
Two interfaces with Same function name Manoj Bisht C# 2005 5 March 25th, 2009 09:52 AM
interfaces malli_kv2 Java Basics 1 April 23rd, 2007 05:21 AM
Trouble hiding and unhiding columns in VBA jtmelb Excel VBA 0 February 14th, 2007 07:04 PM
Excel vba trouble liam.emmett Excel VBA 4 January 30th, 2007 10:58 AM
Compiling trouble Polymer Javascript How-To 1 March 25th, 2005 03:35 AM

Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.