Private Sub Form_Open(Cancel As Integer) ' Minimize the database window and initialize the form.
' Move to the switchboard page that is marked as the default. Me.filter = "[ItemNumber] = 0 AND [Argument] = 'Standard' " Me.FilterOn = True
End Sub
Private Sub Form_Current() ' Update the caption and fill in the list of options.
Me.Caption = Nz(Me![ItemText], "") FillOptions
End Sub
Private Sub FillOptions() ' Fill in the options for this switchboard page.
' The number of buttons on the form. Const conNumButtons = 8
Dim con As Object Dim rs As Object 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("ADODB.Recordset") rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' 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 = "Der er ingen elementer til denne oversigtsside" 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
End Sub
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 Const conCmdOpenPage = 9
' An error that is special cased. Const conErrDoCmdCancelled = 2501
Dim con As Object Dim rs As Object Dim stSql As String
On Error GoTo HandleButtonClick_Err
' Find the item in the Switchboard Items table ' that corresponds to the button that was clicked. Set con = Application.CurrentProject.Connection Set rs = CreateObject("ADODB.Recordset") stSql = "SELECT * FROM [Switchboard Items] " stSql = stSql & "WHERE [SwitchboardID]=" & Me![SwitchboardID] & " AND [ItemNumber]=" & intBtn rs.Open stSql, con, 1 ' 1 = adOpenKeyset
' If no item matches, report the error and exit the function. If (rs.EOF) Then MsgBox "Der opstod en fejl under læsning af tabellen Oversigtselementer." rs.Close Set rs = Nothing Set con = Nothing Exit Function End If
Select Case rs![Command]
' Go to another switchboard. Case conCmdGotoSwitchboard Me.filter = "[ItemNumber] = 0 AND [SwitchboardID]=" & rs![Argument]
' Open a form in Add mode. Case conCmdOpenFormAdd DoCmd.OpenForm rs![Argument], , , , acAdd
' Open a form. Case conCmdOpenFormBrowse DoCmd.OpenForm rs![Argument]
' Open a report. Case conCmdOpenReport DoCmd.OpenReport rs![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 "Kommandoen er ikke tilgængelig." On Error GoTo 0 ' Update the form. Me.filter = "[ItemNumber] = 0 AND [Argument] = 'Standard' " Me.Caption = Nz(Me![ItemText], "") FillOptions
' Exit the application. Case conCmdExitApplication CloseCurrentDatabase
' Run a macro. Case conCmdRunMacro DoCmd.RunMacro rs![Argument]
' Run code. Case conCmdRunCode Application.Run rs![Argument]
' Open a Data Access Page Case conCmdOpenPage DoCmd.OpenDataAccessPage rs![Argument]
' Any other command is unrecognized. Case Else MsgBox "Ukendt parameter."
End Select
' Close the recordset and the database. rs.Close
HandleButtonClick_Exit: On Error Resume Next Set rs = Nothing Set con = Nothing 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 "Der opstod en fejl under udførelse af kommandoen.", vbCritical Resume HandleButtonClick_Exit End If
Dette er ikke nogen fejl, men blot det et faktum, at Access gør dette.
Der er 2 løsninger: Løsning 1) Skriv HandleButtonClick-funktionen om, så den checker på hvilke formularer du åbner. Den del som ser således ud: 'Open a form. Case conCmdOpenFormBrowse DoCmd.OpenForm rs![Argument] ...kan skrives om til: 'Open a form. Case conCmdOpenFormBrowse Select Case rs![Argument] Case "formular1", "Formular3" docmd.Openform rs![Argument] case "Formular2" docmd.Openform rs![Argument],acFormDS end select ...
Løsning 2) Undgå at åbne formularer direkte i datasheet. Lav i stedet en alm. formular, hvori du indsætter datasheet-formlaren som subform. Dette ser også klart bedre ud, da formularen derved får en ordentlig ramme, hvilket kan mangle i datasheet-view.
Hvis du laver en tom formular i designvisning (ingen guide), så kan du herefter 'trække' din datasheet-formular fra databasevinduet og ind på den nye formular. Derved bliver det en hovedformular/underformular, som blot skal åbnes alm.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.