I ran into a particular problem with an associate of mine not too long ago and thaught I’d share the problem & solution with everyone. He had been given an .accdb database that evidently came from an mdb originally as it contained a custom command bar. The problem being that 2007/2010 support such command bars by simply placing them in the Add-Ins tab. However, this issue lies with the fact that 2007/2010 no longer offer the general user/developer a method to edit such command bars as they are considered to be deprecated. My associate wanted to merely delete this command bar and replace it with a proper custom Ribbon Tab. So how do you delete a command bar? Good question! In 2007/2010 the only solution is to use VBA. The actual code to delete a command bar is very simple, as shown below.
Application.CommandBars("CommandBarName").Delete
Sound simple you say. Sadly, no! Once again because MS has decided no longer provide any tools to work with these ‘elements’, you cannot identify the name of the Add-Ins toolbars. if you can’t identify it, you can’t delete it! So what to do? Well, I came up with another simple solution and created a procedure that merely listed all the command bars within the current database. then we could go through the list and identify the one that we needed to delete. Below are two slightly different procedures. The first one is a more general version which merely lists all of the command bars within the database, the second is a slightly more refined version that only lists open command bars. Since the Add-Ins Tab was active, the 2nd procedure was a better option in our case and thus reduce the list we had to sift through (our list went from 202 items to 4 – from there it was easy to determine which one we needed to eliminate).
'---------------------------------------------------------------------------------------
' Procedure : ListCmdBars
' Author : CARDA Consultants Inc.
' Website : http://www.cardaconsultants.com
' Purpose : Lists all the command bars within the current database
' Compatibility: Works with MS Access, Word, Excel, PowerPoint, ...
' Copyright : The following may be altered and reused as you wish so long as the
' copyright notice is left unchanged (including Author, Website and
' Copyright). It may not be sold/resold or reposted on other sites (links
' back to this site are allowed).
'
' Revision History:
' Rev Date(yyyy/mm/dd) Description
' **************************************************************************************
' 1 2011-June-22 Initial Release
'---------------------------------------------------------------------------------------
Function ListCmdBars()
On Error GoTo Error_Handler
Dim i As Long
Dim sCmdBar As CommandBar
Debug.Print "Number", "Name", "Visible", "Built-in"
For i = 1 To Application.CommandBars.Count
Set sCmdBar = Application.CommandBars(i)
Debug.Print i, sCmdBar.Name, sCmdBar.Visible, sCmdBar.BuiltIn
Next i
Error_Handler_Exit:
On Error Resume Next
Set sCmdBar = Nothing
Exit Function
Error_Handler:
MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: ListCmdBars" & vbCrLf & _
"Error Description: " & Err.Description, vbCritical, "An Error has Occurred!"
Resume Error_Handler_Exit
End Function
'---------------------------------------------------------------------------------------
' Procedure : ListVisibleCmdBars
' Author : CARDA Consultants Inc.
' Website : http://www.cardaconsultants.com
' Purpose : Lists all the visible command bars within the current database
' Compatibility: Works with MS Access, Word, Excel, PowerPoint, ...
' Copyright : The following may be altered and reused as you wish so long as the
' copyright notice is left unchanged (including Author, Website and
' Copyright). It may not be sold/resold or reposted on other sites (links
' back to this site are allowed).
'
' Revision History:
' Rev Date(yyyy/mm/dd) Description
' **************************************************************************************
' 1 2011-June-22 Initial Release
'---------------------------------------------------------------------------------------
Function ListVisibleCmdBars()
On Error GoTo Error_Handler
Dim i As Long
Dim j As Long
Dim sCmdBar As CommandBar
Debug.Print "Number", "Name", "Visible", "Built-in"
For i = 1 To Application.CommandBars.Count
Set sCmdBar = Application.CommandBars(i)
If sCmdBar.Visible = True Then
j = j + 1
Debug.Print j, sCmdBar.Name, sCmdBar.Visible, sCmdBar.BuiltIn
End If
Next i
Error_Handler_Exit:
On Error Resume Next
Set sCmdBar = Nothing
Exit Function
Error_Handler:
MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: ListVisibleCmdBars" & vbCrLf & _
"Error Description: " & Err.Description, vbCritical, "An Error has Occurred!"
Resume Error_Handler_Exit
End Function
So as you can see, it is still possible to manipulate command bars in MS Access 2007/2010, but it can now only be done through the use of VBA code!
Thanks to a post by Albert Kallal, a fellow MVP, we also found out that it could be necessary to execute the following
CurrentDb.Properties.Delete("StartUpMenuBar")
and in our case it was required as even after deleting the commandbar in question we were still receiving the error message
… can’t find the object ‘MyCommandBarName.’
If ‘MyCommandBarName’ is a new macro or macro group, make sure you have saved it and that you have type its name correctly