I have had the exact same problems with a program solution I created in Access 2000 and deployed via CD to other machines. Our clients had Windows 98 and Office 97 installed on most of the machines that gave error messages during installation or error messages that came up trying to run the program in the Runtime environment.
My question is: Do you have a "switchboard" form created by the switchboard manager? If so, are you using it as the startup form? In my case, the startup form "FillOptions" module was causing the error messages. Here is how I overcame it.
The error message was being caused by the Switchboard "FillOptions" code. I used the switchboard manager to create the main switchboard for my program and the code created uses an "ADODB. Recordset" that was causing the error on runtime. For some reason when I used the new "ADO" reference, it will not work in the runtime environment. I switched the code to use the "DAO.Recordset" and the only reference library that was required to run the program was MSADO35.dll. There were some other files referenced in the setup, but after installing the revised program on my test machine, it ran perfectly. Here are the changes I made to the code:
1) I commented out Dim con as object
2) I commented out Set rs = CreateObject("ADODB.Recordset"

3) I commented out rs.Open stSql, con, 1 '1 = adOpenKeyset
4) I added Set rs = CurrentDb.OpenRecordSset(stSql)
5) I commented out Set con =Nothing
Below is the FillOptions module with the changes I noted.
Private Sub FillOptions()
' Fill in the options for this switchboard page.
' The number of buttons on the form.
'On Error GoTo HandleErr
Const conNumButtons = 7
'Dim con As Object
Dim rs As DAO.Recordset
Dim stSql 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].SetFocus
For intOption = 2 To conNumButtons
Me("Option" & intOption).Visible = False
Me("OptionLabel" & intOption).Visible = False
Next intOption
' Open the table of Switchboard Items, and find
' the first item for this Switchboard Page.
'Set con = Application.CurrentProject.Connection
stSql = "SELECT * FROM [Switchboard Items]"
stSql = stSql & " WHERE [ItemNumber] > 0 AND [SwitchboardID]=" & Me![SwitchboardID]
stSql = stSql & " ORDER BY [ItemNumber];"
'Set rs = CreateObject("ADO.Recordset"
'rs.Open stSql, con, 1 ' 1 = adOpenKeyset
Set rs = CurrentDb.OpenRecordset(stSql)
' If there are no options for this Switchboard Page,' display a message. Otherwise, fill the page with the items.
If (rs.EOF) Then
Me![OptionLabel1].Caption = "There are no items for this switchboard page"
Else
While (Not (rs.EOF))
Me("Option" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Visible = True
Me("OptionLabel" & rs![ItemNumber]).Caption = rs![ItemText]
rs.MoveNext
Wend
End If
' Close the recordset and the database.rs.Close
Set rs = Nothing
'Set con = Nothing
ExitHere:
Exit Sub
' Error handling block added by Error Handler Add-In. DO NOT EDIT this block of code.
' Automatic error handler last updated at 09-13-2000 12:56:27 'ErrorHandler:$$D=09-13-2000 'ErrorHandler:$$T=12:56:27
HandleErr:
Select Case Err.Number
Case Else
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "Form_Switchboard.FillOptions" 'ErrorHandler:$$N=Form_Switchboard.FillOptions
End Select
' End Error handling block.
End Sub
It seems that Access 97 and Access 2000 Runtime do not like the newer "ADO" reference and prefer the "DAO". I just fixed my error messages over this past weekend and I am in the process of making one last test. I am going to blow out the Switchboard form completely and build one from scratch that does not use any of the code the "manager" uses to create the "on the fly" switchboard changes users can modify. Since I do not want my users making any changes, I think this is the best way to go.
BMeek [sig][/sig]