Switchboard problem

Soegstad

Registered User.
Local time
Today, 08:26
Joined
Dec 3, 2003
Messages
53
Hi
I'm trying to export a switchboard from one database to another, but when I'm trying to open the switchboard in the new database I'm receiving a compile error:
User-defined type not defined.

Here's the code (error line in orange):

Code:
Option Compare Database
Option Explicit

Const conNumButtons = 8
Const conFontWeightBold = 700
Const conFontWeightNormal = 400

Private Sub cmdExit_Click()
    CloseCurrentDatabase
End Sub

Private Sub cmdExit_GotFocus()
    Dim intOption As Integer
    
    'If the Exit Button has received the focus, turn off the focus on all the menu options
    For intOption = 1 To conNumButtons
        Me("Option" & intOption).Visible = False
        Me("OptionLabel" & intOption).FontWeight = conFontWeightNormal
    Next intOption

    ExitLabel.FontUnderline = True
End Sub

Private Sub cmdExit_LostFocus()
    ExitLabel.FontUnderline = False
End Sub

Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ExitLabel.FontWeight = conFontWeightBold
End Sub

Private Sub cmdExit_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    ExitLabel.FontWeight = conFontWeightNormal
End Sub

Private Sub Form_Open(Cancel As Integer)
' Minimize the database window and initialize the form.

On Error GoTo Form_Open_Err

    ' Minimize the database window.
    DoCmd.SelectObject acForm, "Switchboard", True
    DoCmd.Minimize

    ' Move to the switchboard page that is marked as the default.
    Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
    Me.FilterOn = True
    
Form_Open_Exit:
    Exit Sub

Form_Open_Err:
    MsgBox Err.Description
    Resume Form_Open_Exit
    
End Sub

Private Sub Form_Current()
' Update the caption and fill in the list of options.

    Me.Caption = Nz(Me![ItemText], "")
    FillOptions
    
End Sub

[COLOR=orange]Private Sub FillOptions()[/COLOR] 
' Fill in the options for this switchboard page.

    ' The number of buttons on the form.
   
    Dim dbs As Database
    Dim rst As Recordset
    Dim strSQL As String
    Dim intOption As Integer
    
    ' Set the focus to the first button on the form,
    ' and then hide all of the buttons on the form
    ' but the first.  You can't hide the field with the focus.
    Me![Option1].Visible = True
    Me![Command1].Enabled = True
    Me![Command1].SetFocus
    With Me![OptionLabel1]
        .Visible = True
        .FontWeight = conFontWeightBold
    End With
    For intOption = 2 To conNumButtons
        Me("Option" & intOption).Visible = False
        Me("OptionLabel" & intOption).Visible = False
        Me("OptionLabel" & intOption).FontWeight = conFontWeightNormal
        Me("Command" & intOption).Enabled = False
    Next intOption
    
    ' Open the table of Switchboard Items, and find
    ' the first item for this Switchboard Page.
    Set dbs = CurrentDb()
    strSQL = "SELECT * FROM [Switchboard Items]"
    strSQL = strSQL & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
    strSQL = strSQL & " ORDER BY [ItemNumber];"
    Set rst = dbs.OpenRecordset(strSQL)
    
    ' If there are no options for this Switchboard Page,
    ' display a message.  Otherwise, fill the page with the items.
    If (rst.EOF) Then
        Me![OptionLabel1].Caption = "There are no items for this switchboard page"
    Else
        While (Not (rst.EOF))
            Me("OptionLabel" & rst![ItemNumber]).Visible = True
            Me("OptionLabel" & rst![ItemNumber]).Caption = rst![ItemText]
            Me("Command" & rst![ItemNumber]).Enabled = True
            rst.MoveNext
        Wend
    End If

    ' Close the recordset and the database.
    rst.Close
    dbs.Close

End Sub

Private Function HandleFocus(intBtn As Integer)
' This function is called when a menu option receives the focus.
' intBtn indicates which button was clicked.

    Dim intOption As Integer

On Error GoTo HandleMouseOver_Err

    For intOption = 1 To conNumButtons
        'Show that this menu option has the focus...
        If intOption = intBtn Then
            Me("Option" & intOption).Visible = True
            Me("OptionLabel" & intOption).FontWeight = conFontWeightBold
            Me("command" & intBtn).SetFocus
        '... and turn off the focus on the other options
        Else
            Me("Option" & intOption).Visible = False
            Me("OptionLabel" & intOption).FontWeight = conFontWeightNormal
        End If
    Next intOption

HandleMouseOver_Exit:
    Exit Function

HandleMouseOver_Err:
    MsgBox "There was an error executing the command.", vbCritical
    Resume HandleMouseOver_Exit

End Function

Private Function HandleButtonClick(intBtn As Integer)
' This function is called when a button is clicked.
' intBtn indicates which button was clicked.

    ' Constants for the commands that can be executed.
    Const conCmdGotoSwitchboard = 1
    Const conCmdOpenFormAdd = 2
    Const conCmdOpenFormBrowse = 3
    Const conCmdOpenReport = 4
    Const conCmdCustomizeSwitchboard = 5
    Const conCmdExitApplication = 6
    Const conCmdRunMacro = 7
    Const conCmdRunCode = 8

    ' An error that is special cased.
    Const conErrDoCmdCancelled = 2501
    
    Dim dbs As Database
    Dim rst As Recordset

On Error GoTo HandleButtonClick_Err

    ' Find the item in the Switchboard Items table
    ' that corresponds to the button that was clicked.
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset("Switchboard Items", dbOpenDynaset)
    rst.FindFirst "[SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]=" & intBtn
    
    ' If no item matches, report the error and exit the function.
    If (rst.NoMatch) Then
        MsgBox "There was an error reading the Switchboard Items table."
        rst.Close
        dbs.Close
        Exit Function
    End If
    
    Select Case rst![Command]
        
        ' Go to another switchboard.
        Case conCmdGotoSwitchboard
            Me.Filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rst![Argument]
            
        ' Open a form in Add mode.
        Case conCmdOpenFormAdd
            DoCmd.OpenForm rst![Argument], , , , acAdd

        ' Open a form.
        Case conCmdOpenFormBrowse
            DoCmd.OpenForm rst![Argument]

        ' Open a report.
        Case conCmdOpenReport
            DoCmd.OpenReport rst![Argument], acPreview

        ' Customize the Switchboard.
        Case conCmdCustomizeSwitchboard
            ' Handle the case where the Switchboard Manager
            ' is not installed (e.g. Minimal Install).
            On Error Resume Next
            Application.Run "ACWZMAIN.sbm_Entry"
            If (Err <> 0) Then MsgBox "Command not available."
            On Error GoTo 0
            ' Update the form.
            Me.Filter = "[ItemNumber] = 0 AND [Argument] = 'Default' "
            Me.Caption = Nz(Me![ItemText], "")
            FillOptions

        ' Exit the application.
        Case conCmdExitApplication
            CloseCurrentDatabase

        ' Run a macro.
        Case conCmdRunMacro
            DoCmd.RunMacro rst![Argument]

        ' Run code.
        Case conCmdRunCode
            Application.Run rst![Argument]

        ' Any other command is unrecognized.
        Case Else
            MsgBox "Unknown option."
    
    End Select

    ' Close the recordset and the database.
    rst.Close
    dbs.Close
    
HandleButtonClick_Exit:
    Exit Function

HandleButtonClick_Err:
    ' If the action was cancelled by the user for
    ' some reason, don't display an error message.
    ' Instead, resume on the next line.
    If (Err = conErrDoCmdCancelled) Then
        Resume Next
    Else
        MsgBox "There was an error executing the command.", vbCritical
        Resume HandleButtonClick_Exit
    End If
    
End Function


It seems like the error is somewhere in the Private Sub FillOptions.
Thanks guys.
Mads
 
Last edited by a moderator:
REFERENCES!

Be explicit when declaring databases and recordsets.

This question comes up so many times. Search -> Search - > Search ->

Dim db As DAO.Database
Dim db As DAO.Recordset

Your database, instead, is currently expecting:

Dim db As ADODB.Connection
Dim db As ADODB.Recordset

Open the module, goto Tools -> References

Select microsoft Data Access Objects Library and move it above ActiveX Data Objects.


I fixed your [CODE] [/CODE] tags too.

http://www.access-programmers.co.uk/forums/misc.php?action=bbcode#buttons
 
Thanks Mile, works like a charm now.
 
Think I'll write a nice big sticky and place it right at the top of this forum (for now) as this question pops up all too often.
 
I am having this exact problem. I believe it happened when I imported the Access97 database into Access2002 a few years back, the user (club membership director) has just ignored the Switchboard since then. The code was auto-generated by the Switchboard stuff in Access97.

I have:
Dim db As Database
Dim db As Recordset

I have tried adding the "DAO." and "ADODB.", but when I go to the Tools menu, References is grayed out.

Suggestions appreciated!
 

Users who are viewing this thread

Back
Top Bottom