Following a restore of the .XLB file the macro assignments no longer work even if the change is to name the same library and macro for the assignment.There are two macros shown on this page. The Barhopper macro starts of the recursive BarHop macro.
The barhopper macro will pick out toolbars containing “Tool” as part of the name and which are not builtin menus, and will call the barhop macro.
When running this macro suggest opening up the intermediate window in the Visual Basic Editor, under the View menu (or use Ctrl+G). Note the iteration number in the macro is the level within the menus so sufficient information can be used to make similar macros to take an existing toolbar menu and place it into a spreadsheet for use in John Walkenbach’s (Tip 53) “Menu Maker”.
The BarHop macro is extracted from
http://www.cit.ctu.edu.vn/daotao/Book/ACCESS97/COURSE/MOD04-11.HTM (dead link), where you will find additional information. It is part of course materials for MS Access (actually). You can compare that with Bill Manville’s recursive coding to fix toolbar menus and buttons (Custom Toolbars, 1998/01/17), which has a better interface to start off with -- specify from/to personal libraries. Missed the following on Stephen Bullen’s MVP page will have to check out: John Green’s CBList (Command Bar List, 15 June 1999) 1-Command Bar Controls (3781 rows), 2-Built-In Button Faces (590 buttons), 3-PopUp CommandBars (52 rows)One thing missing from BarHopper (this page), and Functions and Macros (BuildToc page is the short cut key assigned to a macro.
I actually use a different filename for my personal.xls file, so you should check that I changed them for this example and that they match what you use.
Following running these macros your toolbars will still not function, you have to then recycle Excel so that your changed toolbars get saved. You may have to experiment with unhiding/hiding your personal.xls file during the running of the macro. The problem as reported by Excel is that there are two personal.xls files open.
The code shown below is available here, but more important is the code for a worksheet version with further enhancements. The code to create and fill in a worksheet was designed for use before Excel 2007, but it also works on the QAT (Quick Access Toolbar) for Excel 2007. For more information on Excel 2007 see Excel portion of my page on “Vista Basic Home”, which is part of my edition conversion to Windows Vista and to Excel 2007 on a new laptop.
Option Explicit Sub barhopper() Dim cmdBarx As CommandBar Dim i As Long For Each cmdBarx In CommandBars If Not cmdBarx.BuiltIn Then If InStr(1, cmdBarx.Name, "My") Or InStr(1, cmdBarx.Name, "Toolbar") Then Debug.Print "================" Debug.Print cmdBarx.Name Debug.Print "================" BarHop cmdBarx End If End If Next cmdBarx End Sub Sub BarHop(cmdBar As CommandBar, Optional iteration As Variant) '--CommandBarControls Collection '--http://www.cit.ctu.edu.vn/daotao/Book/ACCESS97/COURSE/MOD04-11.HTM '--After replacements (even if they are same as before, are not '-- effective until Excel has been completely recycled. '-- are not useable until Excel has been recycled, for toolbars to be savedook themre' Debug.Print String$(iteration * 5 + 2, " "); "->"; ctl.OnAction Dim ctl Dim aMacro As String Dim j As Long If IsMissing(iteration) Then iteration = 0 For Each ctl In cmdBar.Controls Debug.Print String$(iteration * 5, " "); ctl.Caption 'Menus with a control type of msoControlPopup will 'have sub menus that you will run through If ctl.Type = msoControlPopup Then 'If it has a sub-menu, call your routine recursively, 'passing the command bar object for that control BarHop ctl.CommandBar, iteration + 1 Else 'REENTRY --- of macros on buttons and menus j = InStr(1, ctl.OnAction, "personal.xls'!") If j > 0 Then aMacro = "personal.xls!" & Mid(ctl.OnAction, j + 13) Debug.Print String$(iteration * 5 + 2, " "); "--"; aMacro ctl.OnAction = aMacro ' Debug.Print String$(iteration * 5 + 2, " "); "->"; ctl.OnAction End If End If Next ctl End Sub
The view in the Intermediate Window (Ctrl+G) shows indentation based on level within the toolbar. The macro can be started by typing Barhopper into the immediate window and hitting Enter. The Debug.Print statements provide the following listing of my toolbars.================ Toolbar 1 ================ Footer, custom --personal.xls!PutFilenameInFooter Custom-1 Custom-2 custom[3] custom-4 --personal.xls!barhopper MacroDialogBox --personal.xls!MacroDialogBox &Custom Button --personal.xls!RunSubFromActiveCell GoToSub --personal.xls!GoToSub backupBYDATE --personal.xls!backupBYDATE ================ Toolbar 2 ================ Sort &Ascending &Custom Button --personal.xls!Euro_Format ================ Toolbar 3 ================ **Insert Row** --personal.xls!InsertRowsAndFillFormulas **Top of Column** --personal.xls!GotoTopOfCurrentColumn &Custom Button --personal.xls!GotoBottomOfCurrentColumn GoToPrevSheet --personal.xls!GoToPrevSheet GoToNextSheet --personal.xls!GoToNextSheet MakeHTML_Link --personal.xls!MakeHTML_Link ListFunctionsAndSubs --personal.xls!ListFunctionsAndSubs DeleteThisSheet --personal.xls!DeleteThisSheet ================ Toolbar 4 ================ ================ Toolbar x -- Icon Storehouse ================ &Custom Button ================ My Tools saved menu ================ My Tools Char Map --personal.xls!showCharMap Deletions -- Destructive Convert Hyperlinks --personal.xls!ConvertHyperlinks DelHyperLinks --personal.xls!DelHyperLinks delShapesOnSht --personal.xls!delShapesOnSht MakeLastCell --personal.xls!makelastcell Informative -- Msgbox type stuffn FormulaBox --personal.xls!FormulaBox WhereAmI --personal.xls!WhereAmI Listings -- Destructive/Documentation &Custom Menu Item BuildTOC_A3 --personal.xls!BuildTOC_A3 Command Bar List (CB_List) FormulaIntoComments --personal.xls!FormulasIntoComments Get Shaps Proc --personal.xls!getShapeProc List Functions and Subs --personal.xls!ListFunctionsAndSubs EnumerateAddins --personal.xls!EnumerateAddIns Enumerate Sheets_95 --personal.xls!EnumerateSheets_XL95 ReOrderSheets -- Reorders Sheet Tabs --personal.xls!ReOrderSheets Mark Cells --personal.xls!MarkCells Mark Sep Areas --personal.xls!MarkSepAreas Wordpad when on laptop --personal.xls!A_Selected_Delete_Rows Create Simulated Data Fill Sequence --personal.xls!FillSequence Mark Sequence --personal.xls!MarkSeq Random003 --personal.xls!Random003 Random A-Z --personal.xls!RandomAZ GoTo Cell, HTML, Hyperlink, Sheet, Sub Go To Cell --personal.xls!GoToCell Go To HTML --personal.xls!GoToHTML Go To Hyperlink --personal.xls!GoToHyperLink Go To Sheet --personal.xls!GoToSheet Go To Sub --personal.xls!GoToSub Sort Worksheet Tabs --personal.xls!SortALLSheets Reformat: Join, HTML - xl2HTMLx --personal.xls!XL2HTMLx HTML - xl2HTML --personal.xls!XL2HTML HTML - xl2HTMLs - Miultile Sheets --personal.xls!xl2HTMLs Clear Clipboard --personal.xls!Clear_Clipboard Fix US Zip 5 --personal.xls!fixUSzip5 Fill Sequence --personal.xls!fillsequence Firstname --personal.xls!FirstName InsertCellReplacement --personal.xls!InsertCellReplacement Insert Prefix** --personal.xls!insertprefix Join --personal.xls!Join Lastname --personal.xls!LastName Lower_Case --personal.xls!Lower_Case MakeHyperlinks --personal.xls!MakeHyperlinks MakeHyperlinkFormulas --personal.xls!MakeHyperlinkFormulas Make INDIRECT --personal.xls!Make_INDIRECT Proper_Case --personal.xls!Proper_Case Remove Extra Lines Within Cells --personal.xls!Remove_XtraLinesWithinCells Reversi --personal.xls!ReversI RotateCW (top to bottom) --personal.xls!RotateCW Sep Term --personal.xls!SepTerm Sep Last Term --personal.xls!SepLastTerm Suffix (and Prefix) --personal.xls!Suffix TrimALL --personal.xls!TrimALL Upper_Case --personal.xls!Upper_Case Selections Hyperlinks, Sheets Random003 --personal.xls!Random003 IconExplorer.exe -- get icons for toolbars --personal.xls!IconExplorer Select Hyperlinks --personal.xls!SelectHyperlinks selShapesOnSht (selective delete) --personal.xls!selShapesOnSht
If you want to find the code associated with any of the above you can use a Google web search as follows:
site:www.mvps.org inurl:dmcritchie inurl:excel Sub*