Printable Version of Topic

Click here to view this topic in its original format

UtterAccess Forums _ Interface Design _ Side Menu Interface Revisioned

Posted by: jhcarrell Mar 19 2011, 12:00 PM

Many of you may be familiar with the thread started by
After tinkering with it for a while I decided to dig into the code to see if there were any useful changes that could be made.
This post will be the first of an intended series; documenting my modifcation of the examples posted in the original thread.
If anyone has any questions, comments, or suggestions please feel free to reply to this thread.
- - - - - - - - - -
Oremoved the userAccessLevel value list lookup field in tblUsers.
In its place I created tblUserAccessLevel and added a foreign key field to tblUsers.
frmSideMenuAdmin.MenuItemAccess [combo]
- - - - - - - - - -
I changed the Row Source Type from Value List to Table/Query and set the Row Source to tblUserAccessLevel. This will keep the control up-to-date in case of the addition/modification/removal of access levels.
- - - - - - - - - -
Private Sub cboUserName_AfterUpdate()
I modified the “If Me.cboUserName.Column()” statement to reference column 3 (userAccessLevel) instead of column 1 (username) as this is a more logical and efficient approach to accomplish the purpose of this event (disable frmLogin.txtPassword for a selected userAccessLevel(s)).
- - - - - - - - - -
Private Sub cmdLogin_Click()
I modified the “If Me.cboUserName.Column()” statement to reference column 3 (userAccessLevel) instead of column 1 (username) as this is a more logical and efficient approach to accomplish the purpose of this event (load frmDesktop without userPassord for a selected userAccessLevel(s)).
- - - - - - - - - -
Private Function getUserAccessLevel()
I disabled “DoCmd.Close acForm, “frmLogin”, asSavePrompt” in order to reference the current user from frmLogin.cboUserName after login has been completed. I will expound on this in subsequent posts.
- - - - - - - - - -
These icons where added to the header for the purpose of hiding and showing the side menu.
- - - - - - - - - -
This icon was added to the header for the purpose of a quick return to the default form. This will undergo further modification in subsequent posts.
- - - - - - - - - -
This icon was added to the header to serve as an example for navigating to a website by using a browser control.
- - - - - - - - - -
This icon was added to the header for the purpose of displaying the example calendar from in the workspace subform.
- - - - - - - - - -
This icon was added to the header for the purpose of closing frmDesktop and hidden frmLogin followed by opening dialog frmLogOut.
- - - - - - - - - -
This form was added as a dialog after closing frmDesktop. From it you may either quit access or log back in. This type of dialog is useful when different users may access the database on the same workstation without signing in and out of windows. ( 740.97K ): 1713

Posted by: jhcarrell Mar 20 2011, 11:42 AM

Next step: Parent Menu Item Access Management
rmSideMenuAdmin is the form used the manage which parent menu items are visible depending on a user's access level and the access level assigned to the menu item.
In Rex's version, he used:

Public Property Get GroupSource() As String
GroupSourceSQL = "SELECT * " & _
"FROM " & GroupTable & " " & _
"WHERE MenuItemAccess >= " & UserAccessLevel & " " & _
"AND Active = True " & _
"AND MenuItemParent = 0 " & _
"ORDER BY MenuItemOrder;"
End Property

... in the clsSideMenu module to determine which "Parent Menu Items" would be displayed in the side menu of frmDesktop. If you observe the "WHERE" statement, you can see that it is setup in a way that follows a simple hierarchy [>=]. (e.g. In my example there are currently four access levels: Administrator(1), PowerUser(2), User(3), and Guest(4). The current configuration allows Guests to see only items for the access level (as they are currently at the lowest level), Users can see all Parent Menu Items for Guests plus those having User as the minimum access level. This remains true for all levels as you step up the hiarchy (each higher level can see everything the lower levels could).)
One of my goals with this project is to develop a more flexible method for parent menu items. (e.g. Guest(4) can only see items for their specific access level, User(3) can see items for their access level but not for Guest(4), PowerUser(2) can see items for their access level as well as for User(3) but not Guest(4), and Administrator(1) can see all levels.)
This type of setup would require the ability to mix and match which access level can see each parent menu item.
My first inclination to accomplish this was to remove the ">" from the "WHERE" statement and to setup up a multi-value list box on frmSideMenuAdmin in place of MenuItemAccess combo. This was not successful in my tests, but I admittedly have limited experience with multi-value controls as I rarely have need to utilize them.
Anyone have any ideas or suggestions to accomplish this?

Posted by: jhcarrell Mar 20 2011, 05:27 PM

Note: I tried utilizing a multi-value field for tblSideMenuItem.MenuItemAccess and multi-value list box for frmSideMenuAdmin.MenuItemAccess, and removed the ">" from the WHERE statement of clsSideMenu>GroupSource().
quot;Error 3831: (The multiple value field 'MenuItemAccess' cannot be used in a WHERE or HAVING clause.) in procedure GroupSetup of clsSideMenu"
I'm not a fan of multi-value fields and suspect I need to be going about this from another direction. Sometimes it's hard to see the forest for the trees.

Posted by: rjAccDB Mar 23 2011, 12:18 PM

Hi J,
Could it be possible to include also a A2003 version, please.
Thank you very much in advance.

Posted by: jhcarrell Mar 23 2011, 02:12 PM

I will try to include both 2003 and 2007 examples in upcoming posts.
- J

Posted by: jhcarrell Mar 24 2011, 03:27 PM

Main changes with this version are related to the default workspace form.
added users to include one for each access level. Password for all users is "test".
Oalso edited frmLogin to not require a password for "Guest" users (userAccessLevel = 4).
In the event that calls clsDesktop, I've made defaultworkspace select a specific form based on the current user's AccessLevel upon opening frmDesktop.
cmdHome has been edited to target a specific form on click based on the current user's AccessLevel.
txtTime - I added this locked text box as an example of having an active clock on a form.
- J ( 856.69K ): 1034

Posted by: jhcarrell Mar 29 2011, 12:30 PM

I've added a basic method of changing the current user's password.
rmUserPasswordChange is launched from the "User Main Menu" side menu.
It asks for the user to enter their current password, new password, and confirm new password.
1. The current password is matched to the password of the current user.
This is one reason for the following from my original post:
2. The new password is checked against the current password to prevent reusing the same one back-to-back and checked for length (in my example pw is required to be eight characters).
3. If the confirmation password matches, the user's password is changed.
There are several ways I've considered to further modify this; such as force password reset after expiration is reached (x days since pw was last changed), but felt the above was adequate for this example.
- J ( 921.52K ): 636

Posted by: originalread Mar 29 2011, 04:54 PM

This is what I came up with for a solution to the dynamic user access problem. Basically, it works by case 1 being admin, case 4 being guest and case else should capture everything else other then guest. New access levels would be less privileged then the last level. A future improvement would be to stop using the primary key of the access level table and use a different field as the UserAccessLevel.
div class='codetop'>CODE

Public Property Get GroupSourceSQL() as String
Select Case UserAccessLevel
Case 1
GroupSourceSQL = "SELECT * " & _
"FROM " & GroupTable & " " & _
"WHERE Active = True " & _
"AND MenuItemParent = 0 " & _
"ORDER BY MenuItemOrder;"
Case 4
GroupSourceSQL = "SELECT * " & _
"FROM " & GroupTable & " " & _
"WHERE MenuItemAccess = " & UserAccessLevel & " " & _
"AND Active = True " & _
"AND MenuItemParent = 0 " & _
"ORDER BY MenuItemOrder;"
Case Else
GroupSourceSQL = "SELECT * " & _
"FROM " & GroupTable & " " & _
"WHERE MenuItemAccess >= " & UserAccessLevel & " " & _
"AND MenuItemAccess <> 4 " & _
"AND Active = True " & _
"AND MenuItemParent = 0 " & _
"ORDER BY MenuItemOrder;"
End Select
End Property

First Post! Guess I needed to stop lurking eventually.

Posted by: jhcarrell Mar 30 2011, 06:49 AM

Welcome to UA!
I've considered this as well and agree.

Posted by: cocoflipper May 11 2011, 05:35 PM

An excellent UI. I've been toying around with moving completely to A2007 and .accde as the format for my application, but I could not get over utilizing the ribbon instead of the command bars. The main issue was not the ribbon itself (although, I have to say that the ribbon takes up way too much space), it was all the additional "stuff" that the MS Access team gave us no good way of removing in order to make a clean, professional-looking application. Specifically, I'm talking about the following:
- the Office Button
- the QAT (Quick Access Toolbar)
- the Help button
- the minimize and close thingys
- finally, the strange Access icon that would completely remove my main form
All the culprits are displayed on the image I've added to this post
After trolling the internet and UtterAccess, and reading some prior posts, I learned that I could remove everything with the following line:

DoCmd.ShowToolbar "Ribbon", acToolbarNo

Great! This got rid of all the "stuff"....BUT - now any custom menus I had are no longer usable (they no longer appear because I hid the ribbon). Rather than rewrite a lot of code using tabbed windows (as suggests), I was looking for a solution that would allow me to keep some of the functionality I have, yet allow me the flexibility of having a top menu area that's accessible at any menu.
The only downside I see to this is that forms and reports allow you to adjust command bar and ribbon menus, so you can adjust the menu across the top to display different items with forms or reports. This is something I'll have to address if I put this in place.
Thanks for posting it - looks great.

Posted by: JessicaZ May 29 2011, 04:32 PM

I added a little code to open the form in the workspace in add mode -

under Private Function OpenItem....after this code..

                Case -1       'Open in Workspace (-1)
                Form.Parent.sfrmWorkspace.SourceObject = strTarget
                Form.Parent.sfrmWorkspace.Form.Filter = strWhereCondition
                Form.Parent.sfrmWorkspace.Form.FilterOn = True
                Form.Parent.Caption = strMenuItemText       'Nz(Forms(strTarget).Caption, "No Caption")

added this..
                If strArguments = "acAdd" Then
                    ' go to new rec
                    DoCmd.GoToRecord , , acNewRec
                End If

So in the side menu admin, when I want to open one of the child menu items in a workspace, but in "Add" mode, I just put acAdd in the arguments area. Works so far anyway!

Posted by: cocoflipper Jun 8 2011, 12:15 PM

Hi all,
've playing around with this menu, here and there, when I get time. I thought I'd post some edits that I made to the menu that would help a developer who needed this menu for Access 2007 (and perhaps Access 2010, but I have not tested the attached on 2010).
THere are my changes to functionality and code:
- Added Icon on main menu (circling arrow - on admin menu only) which allows a developer to view application as a standalone app or with nav pane /ribbon for development work. Procedures for this are found in a module called PhilCode.
- Clicking again on side menu bar rolls up all menu items (something I saw on other similar side window functionality – Outlook - that I liked). Revised line in clsSideMenu to change GroupCoverX_Click procedures to add this functionality.
- Added option in child submenu to allow menu items to run code (public functions that you would have in a module), with multiple parameters. This may need work , as the limit is currently 10 arguments (which I thought was enough), and there is really no catch to what arguments you enter into the child window (although, the arguments are listed right above for reference). Added table (tblSideMenuProcs), form (frmSideMenuAdminProc), and some additional procedures in PhilCode. Added an example called “Run Function X” to give an idea of the functionality.
- other edits to clsResize, m_Form_Resize code to make sure that when switching between developer view that interior form would be maximized.
One thing that I was not able to address – the brief flash of the Navigation Pane upon starting up the database. I unchecked “Display Navigation Pane” in Access Options / Current Database, to try to make sure it does not display during startup/login, but that still doesn’t seem to stop the pane from briefly displaying. Anyone have any ideas?
There’s a bunch of debug.print lines that can be deleted eventually (I was using those to try and track down some issues with resizing).
HTH. ( 626.29K ): 549

Posted by: JessicaZ Jun 8 2011, 02:16 PM

I have a question about the calendar function in the Side Menu -- Maybe someone can point me in the right direction?
Ocreated an imput form that is linked to training sessions, Usually there is only one session on any given date though occasionally there may be 2 sessions (different session types) that fall on the same date. How the PutinData funtion is coded now it will only enter the first session in the calendar. Can anyone give me an idea of how I might be able to change it to add 2 sessions if I needed to?
urrent code:

Public Sub PutInData()
    Dim strSQL As String
    Dim rs As dao.Recordset
    Dim i As Integer
    Dim myDate As Date
'Empty out the previous month
    For i = 1 To 37
        Me("text" & i) = Null
        Me("text" & i).BackColor = 14211288
    Next i
'Construct a record source for the month
    strSQL = "SELECT refSessionType.SessionType, tblSessions.SessionDate FROM tblSessions LEFT JOIN refSessionType ON tblSessions.SessionTypeID = refSessionType.SessionTypeID WHERE ((MONTH(SessionDate) = " & Me.cboMonth & "  AND YEAR(SessionDate)= " & Me.cboYear & ")) ORDER BY SessionDate;"
    Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
'Populate the calendar
    If rs.RecordCount > 0 Then
        For i = 1 To 37
            If IsDate(Me("date" & i)) Then
                myDate = Format((Me("date" & i)), "m/d/yyyy")
                rs.FindFirst "SessionDate = #" & myDate & "#"
                If Not rs.NoMatch Then
                    Me("text" & i) = rs!SessionType
                    Me("text" & i).BackColor = 8978431
                    Me("text" & i).BackColor = 14211288
                End If
            End If
        Next i
    End If
    Set rs = Nothing
End Sub


Posted by: jhcarrell Jun 8 2011, 06:43 PM

Nice work!
xample of code change made by Phil:

Private Sub m_GroupCover02_click()
    If m_ActiveGroup = 2 Then UpdateActiveGroup m_GroupCount Else UpdateActiveGroup 2

The above rolls to the bottom available parent group.
If you'd rather it roll back to the top "default" parent group you could use the following:
Private Sub m_GroupCover02_click()
    If m_ActiveGroup = 2 Then UpdateActiveGroup 1 Else UpdateActiveGroup 2

By replacing "m_GroupCount" with "1" you will be taken back to the top menu instead.
If you'd like to roll to the parent group directly above or below the current one you could change the "Then UpdateActiveGroup" to a digit higher or lower than the current group as desired.
Ohaven't had a chance to take a hard look at the other modifications you've added, but will chime back when I do.

Posted by: jhcarrell Jun 9 2011, 09:10 AM

I resolved this by moving your "RemoveRibbon()" function call from the OnClick event to the BeforeRender event of frmDesktop and frmLogin. This was tested with Access 2007.

Posted by: cocoflipper Jun 15 2011, 04:48 PM

Never mind - found the answer:
o load images into the imagelist control
- right-click the imagelist
- select ImageListCtrl Object
- select Properties
- on the Images tab, upload images to the imagelist so that you can then use them within the menu

Posted by: jhcarrell Jun 16 2011, 08:18 AM

That is correct on loading new images.
Is far as user specific images for menu items, please provide details on what you're wanting to accomplish. As it is now, the icons are specific to the menu item and the settings are stored in tblSideMenuItem.

Posted by: jhcarrell Jun 20 2011, 06:17 PM

This update should completely replace v04 and v05.
ignificant Changes:
- I corrected the coding for a previously mentioned issue regarding the positioning of group items. This was accomplished by modifying the following:
clsSideMenu - Private Sub m_Form_Resize()
clsSideMenu - Public Function UpdateActiveGroup(intGroup As Integer)
- I also hard coded gradient colors to identify the active group. I plan to make this a feature that can be edited using the SideMenuAdmin form, but wanted to give a preview of the direction I'm going. This was accomplished by modifying the following:
clsSideMenu - Public Function UpdateActiveGroup(intGroup As Integer)
Feedback is welcomed.
- J ( 586.78K ): 796

Posted by: NigelShaw150 Jun 28 2011, 06:03 PM

I have been working on the splitter bar. I can get thev2 main forms to work but the sub forms on the side menu seem to go a bit too deep. I think there are 3? The splitter works by taking the size of the main form and dividing it between the otherv2 forms thus when you move the splitter, the resize event is triggered by the mouse own even of the bar and recalculates the 2 sub form sizes.
The problem at the minute arises as the side bar has a few sub forms that all need to change size at the same time.
To be fair, I've given it about an hour but, can the side bar have less subforms or am I not looking at it right?
Cheers <

Posted by: jhcarrell Jun 28 2011, 07:59 PM

I believe you will find that the key to making the splitter bar work is by making the itempane's (subform of the ctlSideMenu) width dependant on the width of ctlSideMenu. You will also need to make the controls' (groups and groupcovers) width dependant on the width of ctlSideMenu.

Posted by: jhcarrell Jul 3 2011, 11:15 AM

Here is an Updated version. Changes are outlined below.
Group items are now highlighted on mousemove. Users can define seperate gradient color settings for (default) group, highlighted group, active group, and highlighted active group via the SideMenu Group Admin form.
- I've added a group header just about the item pane that updates based on the active group. There are still a couple of improvements planned for this feature.
- Users can now define the width of the SideMenu via the Side Menu Group Admin form.
- I've added a fair amount of commenting to the code to assist others interested in modifying this interface. This is an ongoing process and additional commenting will continue to be added in future updates.
Feedback is both requested and appreciated.
- J ( 828.45K ): 673

Posted by: jhcarrell Jul 8 2011, 12:28 PM

There are two places in the cmdSave click event that [Password] needs to be changed to [userPassword]. That should solve the issue.

Posted by: lkbree51 Jul 8 2011, 01:39 PM

Thanks jhcarrell
That did the trick...doing a fine job on it.
Have a question for you though? How hard would it be to make it 4 to 8 characters instead of the exactly 8? Most people don't like that many characters in a password?

Posted by: jhcarrell Jul 8 2011, 02:30 PM

You can change that criteria or disable/remove it altogether by editing the code behind the change password form's cmdSave click event.

Posted by: lkbree51 Jul 11 2011, 04:38 PM

Hello again
etting another error when I try adding links to the sidebar menu using the SideMenu Admin...getting this error and have to close and sign back in to get it to show what I just added.
Error 9 (Subscript out of range) in procedure ItemPaneSetup of clsSideMenu.
Ohaven't figured it out yet...just thought you might want to know about it? iconfused.gif

Posted by: jhcarrell Jul 11 2011, 06:12 PM

When adding parent (group) items or child menu itiems?

Posted by: lkbree51 Jul 11 2011, 10:32 PM

When adding child menu itiems...haven't tried any parent menu items yet? <>/confused.gif" style="vertical-align:middle" emoid=":confused:" border="0" alt="confused.gif" />

Posted by: cocoflipper Jul 13 2011, 06:19 PM

Hi J
The menu is great. I haven't implemented any of the new changes (stationary menu, highlights, etc), but the version I started using is working out.
One current question relating to printing.... There seems to be no way to open a report in the workspace. Have you tried that, or did you not yet delve into that? Reason I ask - it seems that the choices for producing a report with additional menu items across the top (like the command bar or the dreaded ribbon) are limited. If you run the report as dialog or print preview, you get no additional options along the top. If the report could be put in the workspace, then theoretically, one could change up the icons or buttons present in the Form Header section of the frmDesktop in order to give the user print-specific options when the report is open, then switch back when the report is closed in the workspace.
Your thoughts? If you haven't tackled it, I'll take a look at what I could do tomorrow.

Posted by: jhcarrell Jul 13 2011, 10:16 PM

I actually did run into this once and tested a way to open reports in the workspace, but it seems those changes didn't get incorporated into my later examples. I'll try to post the necessary changes to make it work tomorrow.

Posted by: jhcarrell Jul 13 2011, 10:18 PM

Sorry I haven't had time to look at this yet. (been tied up with other proj

Posted by: cocoflipper Jul 14 2011, 12:50 PM

From the looks of it, I would guess that another object needs to be created that would match the size and location of the sfrmWorkspace. The problem that I see is due to the fact that a report cannot be a sub of a form. So:
- the sfrmWorkspace.SourceObject cannot be a report (you cannot open a report on a form or subform)
- a subreport control cannot be included with a form (frmDesktop), only another report.
What options are left? Well, the only one I can think of at the moment is to open the report in preview mode, include a customized ribbon (ugh) for the report, make sure the report is maximized, make sure that the ribbon is shown/nav pane is hidden, then unravel it all when the report closes. This really takes away from the look and feel of the app, though, as once you show the ribbon, those annoying extras show up (QAT, Windows button).
Still digging for a solution for showing the report in the workspace. Anyone out there who is using this menu - what do you do for reports displaying in this menu app?

Posted by: mwacardsfan Jul 14 2011, 12:53 PM

when I go to log out of the interface, I get the error message:
rror 2450 (My Database cannot fuind the referenced form 'frmDesktop'.) in proceedure SideMenuWidth of ModPublicFunctions
I am logged in as 'Joe Admin'.
Running on Access 2010.
Thanks in advance for your hep.

Posted by: jhcarrell Jul 14 2011, 09:18 PM

I have successfully altered the code to open reports from the side menu, but I'm still digging for the version I tweaked to open reports in the workspace.
dit: the more I think about it, may have been working with pivotcharts and tables as far as the workspace goes ... but I know I had to do some tweaking in regards to reports ... still looking for what I modified earlier.

Posted by: jhcarrell Jul 14 2011, 09:43 PM

Which version of the side menu are you using and have you modified the code at all? I have not duplicated this error as of yet.

Posted by: cocoflipper Jul 14 2011, 09:57 PM

Thanks J, keep me posted. I ran into wall after wall trying to get something to work well. Tried OLE objects on a form, etc... ended the day quite frustrated. This menu is such a great interface for forms, but if I (or someone) can't figure a way to have it produce reports using the menus with an integrated look, I don't know what I'll do. I really can't stand the QAT / Windows Office button that MS, in it's wisdom, forced onto Access and left Access developers without a sense of control to create tight apps.
When I left it at days end, I was messing around with using the Ribbon, but I can't stand the thing. I can set up a report to open in Print Preview, normal mode, and tie a custom Ribbon to it that has a number of Print features. That means I have to run it through a special function, RibbonVisible(True) - which leaves the Nav pane hidden, when I open the report. That would be an acceptable solution if I could somehow remove the QAT junk and Office button barnacle. I even went as far as setting the system Ribbon to disable the Access Options and Exit Access buttons on the Office button, set all other Office button options to visible = False, and started the Ribbon from scratch to remove all I could from those two albatrosses, but wouldn't you know I still could not wipe everything from the Office button (Recent Documents) and the QAT (arrow near Office button). Even one opening for a user to cause trouble is too much in my opinion.
Why does Microsoft make it so hard to produce a professional looking app!!!

Posted by: lkbree51 Jul 15 2011, 01:27 AM

Take your time...I am not rushing you...know it takes time.
This may be somewhat the same as the other person is talking about...but there needs to be some way you can print to PDF's like you can on the regular program...been trying to find a way to turn the ribbon back on for the reports...but no luck yet? pullhair.gif

Posted by: cocoflipper Jul 15 2011, 11:59 AM

lkbree51 - there is a public function - RibbonVisible, that I mentioned in my last post. In the report Activate event, run it as RibbonVisible(True), except you will probably want to make a new function with the same code except for not including the ShowNavPane2007 / HideNavPane2007 calls for the reports. Then run RibbonVisible(False) for the Report close event.

Posted by: cocoflipper Jul 15 2011, 12:07 PM

Hi J and mwacardsfan,
reproduced this error in version 9 of the side menu, using Access 2010. Simple fix is to add something to the SideMenuWidth function, namely:
Instead of just :

        If Forms("frmDesktop").CurrentView = acCurViewFormBrowse Then
            Forms("frmDesktop").ctlSideMenu.Width = rs!ButtonWidth
        End If

Add If...Then statement checking for frmDesktop, like so:
    If Application.CurrentProject.AllForms("frmDesktop").IsLoaded Then
        If Forms("frmDesktop").CurrentView = acCurViewFormBrowse Then
            Forms("frmDesktop").ctlSideMenu.Width = rs!ButtonWidth
        End If
    End If

Posted by: cocoflipper Jul 18 2011, 09:50 AM

Anyone out there come up with a suggestion for creating a seamless print method within this menu? I'm about to tackle it again, see what I can figure out, but any ideas are welcome.

Posted by: cocoflipper Jul 18 2011, 10:36 AM

OK, update from my testing, using the Ribbon to handle any reports.... If you want to get rid of the Recent Documents (so your users can't click on a database while yours is open), set it like this:
pplication.SetOption "Size of MRU File List", "0"
I would imagine, so that your list never gets past zero, you would do this every time you open a report, since it seems to immediately sets the Recent Documents to zero (in case the user opened another Access application while yours was opem). With this, and a USysRibbons entry to wipe the items off the Office button, the Office Button would look like this (see attachment). Result - No Recent Documents, Access Options and Exit button disabled. Still annoying that I have to live with the Office Button elbowing it's way into my app, but at least I've locked out the users from doing something they shouldn't be doing.
Now, the decision point is whether I want to include my printing functionality as small icon items in the QAT, or include a customized ribbon as my print ribbon. Either way, the functionality would not be (should not be) accessible until the user prints.
Any comments are welcome!


Posted by: cocoflipper Jul 19 2011, 05:34 PM

Finally, finally.....FINALLY....after battling the Ribbon dragon, I think I have at last defeated it sufficient to feel like I have some solution with which to post reports in this menu.
EVELOPER'S NOTE: this is NOT by any means a ringing endorsement of the Ribbon. I wish I could use a non-Ribbon solution for reports, and would gladly chuck what I have done in order to have a menu-based solution for this. The conundrum here is that this menu uses a main form (frmDesktop) and a subform for the (sfrmWorkspace), and as such, cannot have a subreport with which one could display the report in the workspace. This is the ONLY reason that I was forced to come up with a Ribbon-based solution. Perhaps in the future I could use the workspace to link to an internal web site that would fire up a reporting software tool that uses the SQL Server tables I have... that's blue sky for now. Or someone can figure out a way to save the report in PDF and display it within the workspace. I would give that option a shot and probably prefer it over this solution.
In the meantime, here is my solution to having a report-based menu:
The original issue was that within this menu interface, when you set up a report in the Side Menu Admin area, the options for displaying the report within the menu interface do not allow for the use of any buttons or icons in the frmDesktop menu form when you turn off the Ribbon using -----> DoCmd.ShowToolbar "Ribbon", acToolbarNo. For example, if you selected a report to run using Print Preview view, Normal Window Mode, the report would display without any additional options along the top of the report. I like to present the user with the menu options to close the preview, print the report, zoom, save as PDF, send to Excel, and email the report. So, the trick was to come up with a menu that could do a number of things:
- allow the user to run a report with a report-specific menu, and return to the main menu seamlessly,
- keep the ribbon from being utilized in the main menu,
- keep the user out of any path that would lead them into trouble or allow them to cause trouble (i.e. remove Office button, QAT menu),
- allow the developer to switch into developer mode (use of the Ribbon for development)
Oleaned towards a Ribbon based solution since I could not produce an access report object within the workspace. As I found out, I could not completely remove the Office Button or QAT. BUT.... I could close and lock the doors using a modified Ribbon in the USysRibbons table. I wound up doing the following:
- using the QAT as my report "ribbon" or "menu bar"
- introduced a Developer's Menu (see the thread for more details on that),
- tied the Developer's menu to the RibbonVisible() function, so that the Developer's menu (Ribbon) is only visible when the ribbon is visible
- calling it "good for now, until anyone comes up with something better"
Here's the RibbonXML to use in the USysRibbons table and include as the ribbon of the current database. It's an amalgamation of the Developer's ribbon, a custom QAT to use with report previews, and some other item which either lock the doors or hide the doorknobs. Here it is:
Again, I'll mention that I don't think this is the optimal solution, but it does work. Feedback is welcomed!
Phil ( 2.86K ): 260

Posted by: lkbree51 Jul 19 2011, 07:33 PM

Hi Phil
Looks like you did have your head in your moniter for a while.
But I have a stupid question for the dummies like me...Where does all this go? Not much on codes yet...but trying to learn.
Thanks for all the great work

Posted by: cocoflipper Jul 19 2011, 11:40 PM

Hi Larry - It is a lot to take in, and my head hurt on numerous occasions while trying to wrestle with it. Perhaps J can weigh in as to whether he wants to fold it into version 10. In the meantime, if you want to fold this in yourself, put the ribbon xml into the RibbonXML field in the USysRibbons table. Look at to learn the ins and outs of adding ribbon code. Even if you want to avoid it (like me), it can't hurt you to learn how to manipulate the ribbon. Then take a look at the link to the Developer's Ribbon site link that I had in the prior post. It includes some module code that you can add into your db, and I think I mention the appropriate spots for where to put it.
may just decide to fold it in and create a version 10 of the side menu interface myself. My real hesitation is probably the thought in the back of my head that says "is this REALLY the best solution?"

Posted by: lkbree51 Jul 20 2011, 10:21 AM

Thanks again
But I am still not very clear where to insert this because I can not find what you are refferring to... < src="" style="vertical-align:middle" emoid=":confused:" border="0" alt="confused.gif" />
I am not that good with code yet,,,but am trying to learn a little about it... reading.gif

Posted by: jazzthieve Jul 21 2011, 03:34 PM

Hi there jhcarrel, I love this design and after some modifications I'm planning to use it aswell. I'm also getting the same 2450 error when trying to log out.
i>"Error 2450 (My Database cannot find the referenced form 'frmDesktop'.) in procedure SideMenuWidth of ModPublicFunctions"
The error occurs on all access levels 1 to 4, this is with your latest version 0.9 without any modifications.

Posted by: cocoflipper Jul 21 2011, 04:12 PM

Check out post #98 on this thread to fix error 2450

Posted by: jazzthieve Jul 21 2011, 04:34 PM

My apologies, I did not notice your post. All is well now, thanks.

Posted by: lkbree51 Jul 22 2011, 05:39 AM

Guess I will just have to wait for Verision 10 to come out because this old dummy is at a lose here... pullhair.gif

Posted by: jhcarrell Jul 25 2011, 12:31 PM

I've been tied up with other projects and have not had a chance to continue work on the side menu. Hopefully, as I'll have more time to focus on further improvements on the interface in coming weeks.

Posted by: skynet Jul 26 2011, 03:11 AM

Hi Guys.
I have been using the side menu for a while. First in access 2003 and later in access 2007.
See my post on spa manager and Point of Sale using both versions of access.
My biggest problem has always been, in run mode if an error occurs and a debug is required the side menu freezes and i
have to log out.
Why is this so.

Posted by: jhcarrell Jul 26 2011, 06:15 AM

Debugging halts all code execution which interrupts the processes necessary for the interface to function properly. Upon resetting the project (when you're finished debugging) certain functions must be reinitiated in order for the interface to continue normal operation. This can be accomplished by closing are reopening the main form, although that certainly isn't the desired functionality for end users (not to mention they shouldn't see error messages with the debug option at all).
The solution to this issue is to add error handling to every function and sub in the application (a good practice for every application) to manage how access responds to both expected and unexpected errors.
The next version I release will have built-in error handling.

Posted by: jhcarrell Jul 26 2011, 12:49 PM

I believe I've pinpointed the cause for this.
o to frmSideMenuAdmin close event and look for this block of code:

    If Not IsNull(Me.OpenArgs) Then
        If CurrentProject.AllForms(Me.OpenArgs).IsLoaded Then
        End If
    End If

Make sure it is not commented out (i.e. remove any ' marks at the beginning of each line).
Obelieve that should correct the issue.

Posted by: josephbupe Jul 29 2011, 07:16 AM

Hi J,
find your menu system to be useful and so I have migrated my database into it and I am having a very pleasant experience with it; I love it!
However, only one thing I am failing to complete is for the current user to view only their data based on their user name and access level when logged in, and for the Power /Admin user to view all the data belonging to all other users.
Please, can you kindly provide a demo on this.
I will be happy to be assisted.

Posted by: NigelShaw150 Jul 31 2011, 08:04 PM

ont know what the latest version is. i have completed the splitter bar and it works great in early tests. i am having a little trouble with the nav bar click as there was a large change for it to work with the splitter. This mean that i wont upload it tonight but, here are some screen shots....
This is based on v04

Posted by: lkbree51 Jul 31 2011, 09:29 PM

Hi jhcarrell
Is this a newer Version of your Side Bar Menu than the V9 you last posted?
Many thanks for sharing all of your hard work with us...also thanks to all that have aided in it.

Posted by: NigelShaw150 Aug 1 2011, 12:56 AM

did look around but didn't see a version 09? It's not a problem adding to it fir a most recent up to date version

Posted by: jhcarrell Aug 1 2011, 04:10 AM

At the moment, version 09 is the current release. (see
However, work on version 10 is well underway.
Nigel, I should note version 10 will have a slightly modified layout in regards to the Nav bar.

Posted by: jhcarrell Aug 1 2011, 04:31 AM

Thanks Larry.
While this interface is a continual work in progress, I hope that it at least serves as a modest example of what is possible with a bit of code, creativity, and a lot of persistence.

Posted by: port_call Aug 1 2011, 09:18 AM

Is there anyway you can add more than 20 items in each Menu/ SubMenu?

Posted by: jhcarrell Aug 1 2011, 10:57 AM

Yes, the code can be altered to allow more than 20 items.

Posted by: jhcarrell Aug 3 2011, 11:57 AM

Here is a preview of a couple of the features being added for version 10.
The side menu will now support use of quick launch buttons. Further enhancements regarding this feature are planned.

Access to groups is no longer restricted to a hierarchical approach, meaning any particiular access level will now be able to access any particular menu group without giving access to lower/higher access levels.


Posted by: cocoflipper Aug 3 2011, 12:11 PM

Hey J,
Have you given any thought, or found any prior code, on the reports/menu button issue? I would be hesitant to propose using my solution, because it uses the ribbon, but if that's the best solution at the moment, if might be good to fold into any new version of the side menu.

Posted by: NigelShaw150 Aug 3 2011, 01:28 PM

I'll wait for version 10 before I modify the splitter

Posted by: josephbupe Aug 4 2011, 09:01 AM

You are such a generous person. Please, also update the calender to be more like the outlook calendar when you are done with what you are working on.
appreciate. Stay well.

Posted by: port_call Aug 4 2011, 09:48 AM

Do you or anyone here know how to do this? and where exactly ? and what exaclty I need to add or adjust? thanks.

Posted by: jhcarrell Aug 4 2011, 10:26 AM

Do what? Please try to be a little more specific.

Posted by: jhcarrell Aug 6 2011, 02:02 PM

I haven't had time to adequately research this yet, but I'm quite ready to use the ribbon method either. Hopefully, I'll have time to give this more attention soon.

Posted by: jhcarrell Aug 6 2011, 02:14 PM

I've decided to delay the release of v10 for a bit longer while I'll further modify the side menu permissions functionality.

Posted by: originalread Aug 8 2011, 10:58 AM

I like the new enhancements! Keep up the good work!

Posted by: cocoflipper Aug 8 2011, 06:16 PM

I may (based upon time constraints and what I can work on in the coming days) post a version 9 1/2 (based on version 9) that includes the printing ribbon functionality, just so people have it as an option to include. It does work, but it's not optimal in my mind, either.
- I wanted to post this again in case you missed it....I posted a while back that the form unload event still seems like a sticking issue to this menu style. With forms in the workspace, the form's unload event (which has a cancel return parameter) does not get called when you use the side menu. The unload event is usually good to avoid closing a form if there exists data entered on the form that has not been saved (you can cancel in the unload, and avoid the form close event).
In your use of the menu, how have you overcome this?

Posted by: jhcarrell Aug 9 2011, 08:39 AM

I had missed that post. I have not addressed the scenerio you list above, but I believe the Open Item function in clsSideMenu could be modified to operate as a workaround. What I'm thinking (off the top of my head mind you) is that we could check the subform to see if it is dirty before loading a new item and proceed accordingly. I'll do some testing with this, but feel free to experiment in the mean time.

Posted by: Frezenius Aug 9 2011, 02:20 PM

It's look very beatiful.
But I 'm working on access 2003.
Can you change 2007 to 2003( v09.mdb)
so thanks!

Posted by: port_call Aug 16 2011, 09:48 AM

Can anyone show me the code or how to do more than 20 menu items

Posted by: port_call Aug 16 2011, 10:10 AM

Can you add code or a way to add more than 20 menu sub items, thanks <

Posted by: recall Aug 18 2011, 07:06 AM

've implemented this interface into my database and it looks and works great - so thanks.
One thing I can't get to work however is the following :
If I create a form that can be viewed as a pop-up screen, on the close button I use the code 'Docmd.close'. However, if the form is opened into the workspace I use the code Forms![frmDesktop]![sfrmWorkspace].SourceObject = "FrmDashAdmin" - which shuts the form down. Because the 'side menu admin' offers the users / administrators the ability to change forms from 'show in workspace' or not, can someone please advise how I get the form to detect how it has been opened (i.e. in workspace or not) so when they press the close button it uses the correct code to shut the form down.
Thanks for any help offered,

Posted by: recall Aug 18 2011, 07:25 AM

've implemented this interface into my database and it looks and works great - so thanks.
One thing I can't get to work however is the following :
If I create a form that can be viewed as a pop-up screen, on the close button I use the code 'Docmd.close'. However, if the form is opened into the workspace I use the code Forms![frmDesktop]![sfrmWorkspace].SourceObject = "FrmDashAdmin" - which shuts the form down. Because the 'side menu admin' offers the users / administrators the ability to change forms from 'show in workspace' or not, can someone please advise how I get the form to detect how it has been opened (i.e. in workspace or not) so when they press the close button it uses the correct code to shut the form down.
Thanks for any help offered,

Posted by: Katty Aug 18 2011, 09:10 AM

don't know if it would work, but if it is VBA you are using for the close buttons on your form, you could test to see if the sourceobject is equal to the form the close button is supposed to be closing. If it is, then set the sourceobject = frmdeshadmin otherwise use docmd.close.
Something like

if forms![frmDesktop]![sfrmWorkspace].SourceObject = then
forms![frmDesktop]![sfrmWorkspace].SourceObject = "FrmDashAdmin"
end if

Complete aircode there. I am not sure exactly what property you would have to use from the form you are testing it from however name is the most likely.

Posted by: jazzthieve Aug 21 2011, 07:19 AM

Hello, I have a small question. how can I make the navigation pane be hidden by default when the user logs in. I tried changing bits of code on the on open event of frmdesktop but with no luck.

Posted by: port_call Aug 22 2011, 05:54 AM

Can you tell me how? I'm not much on coding, still learning
thansk <

Posted by: recall Aug 30 2011, 07:36 AM

Can someone help me please with the side menu interface. I've created a form with a subform (called ChildForm) on this. The subform is a datasheet. When I click on a button on the main form I want to implement code which changes the rowsource of the subform. I've used the following code. Problem is I'm getting an error of 'object doesn't support this property or method'. Does anyone know where I am going wrong please :

[Forms]![frmDesktop]![sfrmWorkspace].[Form]![ChildForm].RecordSource = "SELECT LoadNumberID, HaulierID, HaulierIDSecondary, LoadType, Costed FROM Upload_TblLoads;"

I've got around the problem so far by creating 2 subforms with the 2 scenarios I want to list and they become hidden or visible depending on what button the user presses, however I'd like to do things properly by changing the recordsource.

Posted by: Katty Aug 30 2011, 09:29 AM

I think your problem is likely the syntax of how you are calling the property and from where. As frmDesktop is the main form, sfrmWorkspace is the 1st subform and your childform is the second subform. Your button sounds like it is running from sfrmWorkspace (which is holding your main form as the source object).
Is per, I think you should be using Me![childform].Form.RecordSource.
Not exactly sure, but the link gives the best write up I've ever found on referring to subforms.

Posted by: recall Aug 30 2011, 10:37 AM

Sorted thanks.
olution was :

[Forms]![frmDesktop]![sfrmWorkspace]![ChildForm].Form.RecordSource = "QryKeyCostingsUncosted_ForDatsheet"

Posted by: recall Sep 8 2011, 08:27 AM

Can anyone help me with a problem I've got.
I'm using the side menu interface and it looks / works really well. The only issue I have is that on some PCs I put it on the bottom menu / menus disappear off the bottom of the screen. It may have something to do with the screen resolution. Has anyone had similar experiences and if so how have they been able to resolve?
Thanks for any advice offered.

Posted by: Jackns Sep 21 2011, 01:03 PM

HELP HELP!!!! Wondering if someone can give me a hand on this issue im having seems when i click on the dialog box (certification / Drill ) it shrinks the interface like a (dialog box) im a bit stumped everything works great and i much appriciate the interface design ..


Posted by: constantG Dec 8 2011, 09:56 PM

Got it!!! < < I had to use ---- Forms!frmdesktop!sfrmworkspace!. ----- followed by the control on the frmPersonal. If I understand it correctly the control sfrmWorkSpace becomes the form frmPersonal when it is initiated from the sidebar. Very confusing but I got it working. yey.

Posted by: jhcarrell Dec 13 2011, 04:49 PM

This may help ...
frmWorkspace is not a form itself, but rather an unbound control within frmDesktop.
The Source Object for the sfrmWorkspace control is managed via VBA code.

Posted by: jhcarrell Dec 22 2011, 11:41 AM

This will be my last posted example of this side menu interface example indefinitely.
ersion 10 as posted here is in an experimental stage and is not ready for production use as is.
The permissions functions have been reworked and are functional, but need to be incorporated into frmSideMenuAdmin (see frmSideMenuAdminGroupAccess).
I was working on several new features when an as of yet unknown source of performance lag (VBA) was discovered when using as a split database application.
There are many interesting pieces of code within this example that UA members may find useful in other projects outside of this interface.
I welcome and encourge other members to use, modify, and share this example.
My only request is that comments regarding credit for authoring/editing code contained within remain.

Posted by: jhcarrell Dec 23 2011, 09:54 AM

After taking a fresher look at this, I realized that I had made additional modifications to the side menu permissions setup that were nearly complete and will greater benefit members experimenting with this interface.
will finish and implement the permissions manager and repost version 10.

Posted by: lkbree51 Dec 23 2011, 10:21 AM

Hello jhcarrell
downloaded your new version and you seem to have left out the Log Out...just wanted to let you know.

Posted by: jhcarrell Dec 23 2011, 11:39 AM

The code is still there, you just need to add a button named cmdLogOut to frmDashboard and reference [Event Procedure] in the On Click property of cmdLogOut.
'll add one when I repost.

Posted by: lkbree51 Dec 23 2011, 12:17 PM

Also I noticed that from any user type you can go into the design view of your DataBase? Just for your not all have done a great job on this and I am very greatful for you time and effort.

Posted by: jhcarrell Dec 23 2011, 02:31 PM

That can be corrected by adding code basing visibility of that button to the On Open event of frmDashboard.
THere is Version 10 Repost.
If you open frmSideMenuAdmin, you will notice a new button "Menu Permissions". This opens the menu permissions manager.
Now you have the ability to not only control which groups are visible based on the user's access level, but also which items are visible within the groups.
J ( 801.7K ): 1987

Posted by: lkbree51 Dec 23 2011, 05:23 PM

Thanks a lot jhcarrell
Any ways...have a safe and happy holidays...hope to see you around much more next year.
When it comes to adding code to something...I am not that good at it...been trying to get a function to get the previous balance from the last record enter for each Clients and haven't been able to come up with nothing.
So have a good one.

Posted by: jhcarrell Dec 23 2011, 05:29 PM

Thanks and same to you.
I'm pretty sure I can help you with that as I've done something very similar in another project.
I did you start a thread regarding what you're trying to do? If so, PM me the link and I'll chime in.

Posted by: lkbree51 Dec 23 2011, 05:47 PM

I started a thread on it but I don't know how to link them.

Posted by: port_call Jan 11 2012, 07:44 AM

Is there anyway you can add more than 20 items in each Menu/ SubMenu? if so, how and where do you add it at?

Posted by: jhcarrell Jan 11 2012, 09:10 AM

Yes, but it'll take some work to do so.
irst find these lines of code in clsSideMenu

Private WithEvents m_ItemPane As Form
Private WithEvents m_ItemCover01 As Access.CommandButton
Private WithEvents m_ItemCover02 As Access.CommandButton
Private WithEvents m_ItemCover03 As Access.CommandButton
Private WithEvents m_ItemCover04 As Access.CommandButton
Private WithEvents m_ItemCover05 As Access.CommandButton
Private WithEvents m_ItemCover06 As Access.CommandButton
Private WithEvents m_ItemCover07 As Access.CommandButton
Private WithEvents m_ItemCover08 As Access.CommandButton
Private WithEvents m_ItemCover09 As Access.CommandButton
Private WithEvents m_ItemCover10 As Access.CommandButton
Private WithEvents m_ItemCover11 As Access.CommandButton
Private WithEvents m_ItemCover12 As Access.CommandButton
Private WithEvents m_ItemCover13 As Access.CommandButton
Private WithEvents m_ItemCover14 As Access.CommandButton
Private WithEvents m_ItemCover15 As Access.CommandButton
Private WithEvents m_ItemCover16 As Access.CommandButton
Private WithEvents m_ItemCover17 As Access.CommandButton
Private WithEvents m_ItemCover18 As Access.CommandButton
Private WithEvents m_ItemCover19 As Access.CommandButton
Private WithEvents m_ItemCover20 As Access.CommandButton

and add the desired number of command button item covers. Example:
Private WithEvents m_ItemCover21 As Access.CommandButton
Private WithEvents m_ItemCover22 As Access.CommandButton

You will also need to open the form ctlSideMenuPane in design view and add the following controls for each new item (example is for 2 new items):
See exisiting items. You could copy, paste and rename to save time.
A word of caution ... ctlSideMenuPane's detail section is set to have no scroll bars ... as you add additional items, it may become necessary to change this setting. I would recommend doing in in code based upon the itempane record set count or similar as opposed to making scroll bars visible by default.
You will also need to add the following code to clsSideMenu:
Private Sub m_ItemCover21_click()
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'// AUTHOR : Rex
'// REVISIONS BY : jhcarrell
'// HISTORY : 26 Jul 2011 - Added error handling. (JHC)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
On Error GoTo Error_Handler
OpenItem ItemMenuID(21)

Exit Sub
DisplayError Err.Number, Err.Description
Resume Exit_Procedure
End Sub
Private Sub m_ItemCover21_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'// AUTHOR : Rex
'// REVISIONS BY : jhcarrell
'// HISTORY : 26 Jul 2011 - Added error handling. (JHC)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
On Error GoTo Error_Handler
HighlightItem "Item21"
Exit Sub
DisplayError Err.Number, Err.Description
Resume Exit_Procedure
End Sub
Private Sub m_ItemCover22_click()
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'// AUTHOR : Rex
'// REVISIONS BY : jhcarrell
'// HISTORY : 26 Jul 2011 - Added error handling. (JHC)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
On Error GoTo Error_Handler
OpenItem ItemMenuID(22)
Exit Sub
DisplayError Err.Number, Err.Description
Resume Exit_Procedure
End Sub
Private Sub m_ItemCover22_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'// AUTHOR : Rex
'// REVISIONS BY : jhcarrell
'// HISTORY : 26 Jul 2011 - Added error handling. (JHC)
'// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
On Error GoTo Error_Handler
HighlightItem "Item22"
Exit Sub
DisplayError Err.Number, Err.Description
Resume Exit_Procedure
End Sub

Please note that I have not tested this and can't guarantee that I've thought of all steps necessary, but this should get you started.
Hope that helps.

Posted by: lkbree51 Jan 11 2012, 07:04 PM

irst off...thank you for all the work that you all have put into the Side Bar Menu and it is very great. ...
I have been trying to work with your Version 10 and I can't get anything to work on seems. I can't even get it to add my forms and reports to the menu.
Guess I am just not smart enough for something like this.

Posted by: jhcarrell Jan 11 2012, 10:18 PM

After adding your forms as menu items to the selected group, you will need to open the permissions manager and select what groups and menu items each access level can see in the side menu.
se attached screenshots as a reference ...
click blue arrow to add menu items, click red arrow to set menu permissions. Select the user group from the combo and then select which groups AND which menu items in those groups the user group can see. This process could be streamlined and further improved upon.
Note: As I stated in earlier posts, this is not a production ready interface, but more so an experiment with functionality based loosely on Rex's original side menu example. A fair amount of refinement and testing should be considered necessary before deploying in a live user environment.
Hope this helps.

Posted by: lkbree51 Jan 12 2012, 04:36 AM

Thanks jhcarrell
still can't get it to work...I will try using the version 9 one

Posted by: jhcarrell Jan 12 2012, 09:14 AM

Can you confirm that you are using version 10_Final posted
had to repost version 10 after realizing I had not fully implemented the new permissions manager in the first posting.
I've tested the functionality of adding new forms and menu items and had no issues.
Step 1 - Import/create your forms/queries/reports in the side menu database
Step 2 - Select/create parent group item(s) that you want your form/object to fall under using the side menu admin form
Step 3 - Create child menu item(s) to point to your desired form/report/etc using the side menu admin form
Step 4 - Click the Menu Permissions button to open permissions form
Step 5 - For each permissions group you want to add the new menu item to, select user group in the combo box, then add parent menu group(s) this user group should be able to see, then add menu item(s) for each of those menu groups.
The available menu items are linked to the menu group selected in the assigned menu groups listbox.
If anyone else is having issues with the administration menus, please let me know.

Posted by: jhcarrell Jan 12 2012, 01:12 PM

Open the ctlSideMenuPaneIcons form in DESIGN view, and double click the imlSmallIcons control to open the icon interface. Go to the Images Tab and click Insert Picture. See attached pic as reference.
Note: In order to preserve transparency in Access, you will need to convert your image (.gif, .jpg, .png) to an Enhanced Metafile (.emf). Stephen Lebans has a nice tool for converting to .emf on his site.
THere is the link:
Here is an updated version of
Hope that helps.


Posted by: HiTechCoach Jun 5 2012, 07:06 PM

Is this the thread: Side Menu Interface Revisioned, Office 200

Posted by: cocoflipper Jun 7 2012, 03:29 PM

I don't have a doc that details any changes to the side menu interface, but I've followed and worked on the previous thread for this menu. I'll bookmark this current thread and post the latest version I have once I get to polishing it up. The main improvement I have to the side menu interface was handling reports in the workspace window. Displaying reports in this type of menu presents two challenges:
1. You cannot include a report as a sub object within the workspace (you cannot have a subreport within a form)
2. When you run a report, it brings up the ribbon, which is what the side menu interface is trying to get rid of in the first place.
So, what I can up with was a way to output the report to pdf, then bring the pdf up in the workspace once the report is saved. I'll post that code to this new thread once I clean up all the "construction debris".
Thanks for keeping this thread alive....

Posted by: jhcarrell Oct 24 2012, 11:01 AM

I recently received a PM from a member asking about the functionality of the interface login and permissions management. Their goal is to utilize user's network credentials to establish permissions instead of a login form. I decided to respond here so that other UA members wanting to experiment with the side menu might better understand some of its inner workings.
For those of you unfamiliar with the side menu interface, below are links to some of the threads concerning it: by by
Any example of the side menu interface I posted was/is intended as a functional demonstration of various features and capabilities. None of the side menu examples I have shared should be considered ready for deployment as is. Additionally as I did not create the interface from scratch and didn't review/modify every aspect of the original example, but rather reworked functional behaviors and supporting code, I can't guarantee that everything demonstrated within the interface works as expected or at all. That said, UA members should feel free to experiment with and/or use any of the code provided within the examples granted that appropriate credit is given to the original authors, whether myself or others.
The following posts will explain in detail how the permissions are assigned and managed within the side menu interface and potential improvements that could be made.
More to follow ...

Posted by: johnwatkins35 May 11 2013, 09:19 AM

i like the design of side menu v9 better than v10. because in v10 the grey-black buttons on the top and bottom, they dont really do anything. is there a way that you can put the permissions button that you put in v10, into v9? thanks i like the side menu though, im trying to figure out how to use it it my own database.

Posted by: jhcarrell Aug 18 2013, 11:53 PM

Hi John,
The buttons you reference at the bottom of the side menu in v10 were going to become user defined quick launch buttons. However, as I have stopped developing this interface, that feature was never fully implemented. The permissions setup was completely reworked from v9 to v10. It would take some time to rework v9 to have the same setup. Feel free to play with it and see what you can do with it.
- J

Posted by: astubits Sep 27 2013, 11:30 AM

This is a remarkable project and a truly heroic undertaking, many, many tanks to JHCarrel and others involved.
I am wondering if someone can pointy me in the right direction for a modification to the interface. Right now, it seems, the default workspace is a dsahboard determined by the user's access level. I would like to modify it so that with the selection of a particular group from the left side bar, the workspace automatically loads a dashboard specific to that particular group.
I am sure it is possible, but before I get too deep in it, I thought I'd solicit gudiance.
Many thanks!!

Posted by: vba4fun Nov 27 2013, 08:28 PM

Just wanted to give you a thumbs up for this Project.
Been out of VBA Programming for a few years now, and picked up som old Projects againg. Browsing for some other Things i came over this great user Interface.
Yeah and i know that this post is old, but so am I.
Keep up the

Posted by: jhcarrell Dec 23 2013, 12:51 PM

Yes, this is a pretty simple modification to hard code, but it would be a better idea to come up with a way to manage it through the interface. You could set the form name for the workspace in tblUserAccessLevel if you wanted it to be determined by access level, or if you wanted to make it user specific, you could store the form name in tblUsers and ignore permissions altogether for the default form.
o modify the default workspace depending on what "group" is selected, you could store the form name in tblSideMenuItem and modify the side menu admin form to use as the interface to set it.
You'll want to fire the default workspace update in the clsSideMenu class module on all of the m_GroupCoverXX_click() events. I'd recommend writing a procedure specific to determine the active group and update the default workspace, then trigger it in each of the group cover click events.
Hope that helps.

Posted by: Pascolo73 Jul 11 2018, 09:37 AM

Hi all, I'm a little bit late to this post (5 years late) and I'm using Access 2013. I'm also new to Access and to the Forums but I find the Side Menu very useful. Thank you very much for your posts. I'm glad I'm part of your community now.
(Sorry if I made any mistakes when writing. English is not my native language)

Posted by: mrcunknown May 22 2019, 01:11 AM

Hi all, I found this tread on the forum and im very inpressed by it and i would like to use it. When i put other frm in and make a button i get this warning. (see attachment). Does someone know how to fix somethink like this?


Posted by: palta_S Jul 2 2019, 07:21 PM

Newbie... how does this db work in Access 2013. Getting issues with it.. Got past first issue 2nd issue error code 2192


Posted by: jhcarrell Jul 4 2019, 12:19 PM

Hi palta,

The original version of this interface was built in either MS Access 2003 or 2007. My efforts to extend it were done in MS Access 2007/2010. I haven't looked at this interface in years and have no plans to modify it further or support it in the future. This interface was primarily a thought experiment and learning experience. As has been stated in the past, it should not be considered as a production ready interface, but, instead, more of a collection of examples of functional features that could be achieved at the point they were posted. With the passage of time (and new releases of Access), I'm sure there have been new approaches (and possibly more efficient) to achieve similar functionality. While this interface was a lot of fun to work on, my career has pulled me away from regular Access development.

Anyone is welcomed to use and/or modify this interface in pieces or in its entirety, but please understand that you do so at your own risk.

Good luck with your project.

Posted by: DanielPineault Jul 4 2019, 12:40 PM

As the error states, you are running on a 64-bit version of Access and the db was developed using 32-bit. So you need to update the API declaration... to make it work on 64-bit, or better yet reinstall Office as 32-bit.

Got past first issue

You updated the API declarations? Does your db compile without errors?

Posted by: palta_S Jul 4 2019, 01:28 PM

Yeah thanks using Access 2003 as I saw a version was made for that also. I've isolated the side menu interface is giving me issues here in images...