{"text_format":"1","workbook":"xlsx","n_sheets":3,"sheets":["Instructions","Information","Data"],"not_rendered":{"charts":1,"images":14,"macros":1,"external_links":0,"defined_names":0,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Instructions","index":0,"n_rows":56,"n_cols":2,"rows_kept":56,"cut":false,"hidden":false,"merged":[]}
[]
[null,"The Ribbon Foundry  "]
[]
[null,"What is the Ribbon Foundry?"]
[null,"The Ribbon Foundry is an Excel workbook that can help you to customize the Microsoft Excel Ribbon to execute macros that you have written or recorded.  These ribbon modifications will follow the workbook.  That is, the ribbon will be modified when that workbook is the active workbook, even if it is copied to another machine."]
[]
[null,"What can the Ribbon Foundry do?"]
[null,"The Ribbon Foundry can make simple additions to the Ribbon.  You can add buttons to groups you create and add those groups to new tabs or to existing tabs."]
[]
[null,"How does the Ribbon Foundry work?"]
[null,"Modifications to the Microsoft Excel Ribbon are specified in several XML files that are a part of the Excel 2007 Excel file format.  The Ribbon foundry simply allows you to describe the ribbon modifications you would like to make by configuring worksheets with the information needed to compose those files.  You will select a target workbook to which to apply the ribbon and the Ribbon Foundry does the rest."]
[]
[null,"How do I get started?"]
[null,"This workbook has a tab in the ribbon named \"Ribbon Foundry.\"  On that tab, you will see a button labeled \"Show Example.\"  When you click this button, you see an example of how to configure a worksheet.  Here are the basics.  Each worksheet can hold modifications for one tab in the ribbon.  If the worksheet has the same name as an existing ribbon, groups specified on that sheet will be appended to the ribbon tab that has the same name.  If the sheet name does not match one of the built-in ribbon tabs, groups specified in the sheet will go in a new ribbon tab with a name that matches the sheet name.   "]
[]
[null,"What are Groups?"]
[null,"Each button in the ribbon is in a group.  You specify the groups by putting a common name in the \"Group Name\" column of the worksheet that has your ribbon modifications.  To make buttons appear in the same group, the group name for each of those buttons must be identical and they must appear sequentially on the sheet.  Group names must be unique across all sheets used for the ribbon modification.  That is, no two groups can have the same name even if they are on different tabs. "]
[]
[null,"What are the different columns in a ribbon modificaiton sheet for?"]
[null,"A ribbon modification sheet has six (6) columns as follows:\n\nGroup Name\nImage\nText\nSize\nIdentifier\nSub Procedure\n\nEach is described below."]
[]
[null,"Group Name is used for specifying how buttons are grouped together.  Buttons with the same value for group name will appear in a group with that name.  Group names must be unique across your ribbon modification and buttons for a given group must appear sequentially."]
[]
[null,"Image is a place where you can put an image to be used on the face of the button.  Ideally, the image should be 48x48 pixels.  The image must appear completely within the cell boundaries of the column named “image” for the row that describes the button."]
[]
[null,"Text is the wording that will appear below the button.  Different buttons can have the same value for the “text” column.  However, see the entry on identifiers below for a caution."]
[]
[null,"Size indicates if the button will be large “large” or small “normal” in size.  “large” and “normal” are the only valid values for this column.  If left blank, the Ribbon Foundry will fill the empty cell with “large.”"]
[]
[null,"Identifier is the value that is used to keep order with the internal workings of the XML that is built to implement the ribbon modifications.  No two rows may have the same value in the “identifier” column.  If the column is left blank, the Ribbon Foundry will try to generate a value based on the text for the button; however, if two buttons have the same text, the identifiers will not be unique.  This will result in an error that must be corrected manually."]
[]
[null,"Sub Procedure is where a stub is built for you to copy and paste to a VBA module to give instructions for what the button is to do.  This column will be filled automatically."]
[]
[null,"How many tabs can I add?"]
[null,"I don't know.  There must be some limit but I have not found it."]
[]
[null,"How can I temporarily prevent a tab from being included in the ribbon modifications?"]
[null,"You can indicate which tabs will be included in the ribbon by clicking on the “Select Sheets” button on the “Ribbon Foundry” tab in the ribbon.  This will bring up a dialog box that will allow you to indicate which sheets should be used for generating the ribbon."]
[]
[null,"How do I make the Ribbon Modifications?"]
[null,"Just click on the “Create Ribbon” button on the “Ribbon Foundry” tab in the ribbon.  This will bring up a dialog box that will allow you to specify which the workbook to receive the ribbon modifications.  The workbook you choose as your target must be open and must have been saved as a “Macro Enabled” workbook (with a .xlsm extension)."]
[]
[null,"Who made the fantastic workbook?"]
[null,"This workbook (the “Ribbon Foundry”) was created by Professor Gove N. Allen, an associate professor of information systems at Brigham Young University’s Marriott School of Management.  He made it so his students who were learning to program in VBA could make ribbon modifications early in the term without needing to undertake the substantial learning required to make ribbon modifications by hand.  "]
[]
[null,"What does it cost to use?"]
[null,"There is no charge to use this workbook for personal, educational or commercial use.  It is released under a creative commons license.   You are free to copy, distribute and transmit this workbook to others.  You are free to adapt this workbook to meet your needs.  The only requirement is that if you share this workbook (with or without modifications) that you include the block of text above that gives proper attribution to the creator of the workbook."]
[]
[null,"Where can I get an updated version of this workbook?"]
[null,"I’m not sure I’ll ever release an update but if I do, I will make it available at http://gove.net/ribbonFoundry"]
[]
[null,"Will it work on the Mac Version of Excel?"]
[null,"Nope.  The code relies on windows features to unzip modify and reZip the workbook.  These things can probably be done on the Mac version but I'm not the right one to do it.  Hopefully, someone will do it and send me a copy so I can distribute it.\n\nHowever, if you modify the ribbon of a workbook on the Windows version of Excel and send that workbook to a user of the Mac version, your changes should be functional on the Mac.\n"]
[]
[null,"What could possible go wrong?"]
[null,"Who knows?  I wrote this on Martin Luther King Jr. Day, 2012 .  Needless to say, at the time of this writing,  it has not been thouroughly tested.  However, when you click the \"Create Ribbon\" button, your target workbook is backed up with the following naming convention <filename>-Backup.xlsm.  So, you should be able to recover your work.  Although the code is deisgned to work on any workbook, it has only been tested on very simple workbooks.  Oh year, one more thing: this workbook is provided without any warranty of any kind."]

{"sheet":"Information","index":1,"n_rows":8,"n_cols":6,"rows_kept":8,"cut":false,"hidden":false,"merged":[]}
["Group Name","Image","Text","Size","Identifier","Sub Procedure"]
["Time Services",null,"Local Time","large","localTime","Sub btnLocalTime_click(control As IRibbonControl)\n  activecell.value= formatdatetime (now,vbLongTime)\nEnd Sub"]
["Time Services",null,"Date","large","date","Sub btnDate_click(control As IRibbonControl)\n  activecell.value= formatdatetime (now,vbLongDate)\nEnd Sub"]
["Time Services",null,"To Go","large","toGo","Sub btnToGo_click(control As IRibbonControl)\nmsgbox  datediff(\"n\",now,dateadd(\"h\",17,date)) & \" minutes until 5:00 p.m.\"\nEnd Sub"]
["Random Numbers",null,"Choose Bounds","large","chooseBounds","Sub btnChooseBounds_click(control As IRibbonControl)\nactivecell.value =  application.WorksheetFunction.RandBetween(inputbox(\"Lower Bound\"),inputbox(\"Upper Bound\"))\nEnd Sub"]
["Random Numbers",null," Decimal 0-1","large","random","Sub btnrandom_click(control As IRibbonControl)\nactivecell.value = rnd\nEnd Sub"]
["Random Numbers",null,"Integer 0-1","large","coin","Sub btncoin_click(control As IRibbonControl)\nactivecell.value =  application.WorksheetFunction.RandBetween(0,1)\nEnd Sub"]
["Random Numbers",null,"integer 1-6","large","dice","Sub btndice_click(control As IRibbonControl)\nactivecell.value =  application.WorksheetFunction.RandBetween(1,6)\nEnd Sub"]

{"sheet":"Data","index":2,"n_rows":8,"n_cols":6,"rows_kept":8,"cut":false,"hidden":false,"merged":[]}
["Group Name","Image","Text","Size","Identifier","Sub Procedure"]
["Row Highlighter",null,"Remove Color","large","removeColor","Sub btnRemoveColor_click(control As IRibbonControl)\n  activecell.entirerow.Interior.ColorIndex=0\nEnd Sub"]
["Row Highlighter",null,"Blue","normal","blue","Sub btnBlue_click(control As IRibbonControl)\n  activecell.entirerow.Interior.Color = 16763904\nEnd Sub"]
["Row Highlighter",null,"Green","normal","green","Sub btnGreen_click(control As IRibbonControl) \n  activecell.entirerow.Interior.Color = 5296274\nEnd Sub"]
["Row Highlighter",null,"Yellow","normal","yellow","Sub btnYellow_click(control As IRibbonControl) \n  activecell.entirerow.Interior.Color = 65535 \nEnd Sub"]
["Row Highlighter",null,"Grey","normal","grey","Sub btnGrey_click(control As IRibbonControl) \n  activecell.entirerow.Interior.Color = 12566463\nEnd Sub"]
["Row Highlighter",null,"Red","normal","red","Sub btnRed_click(control As IRibbonControl) \n  activecell.entirerow.Interior.Color = 255 \nEnd Sub"]
["Row Highlighter",null,"Tan","normal","tan","Sub btnTan_click(control As IRibbonControl) \n  activecell.entirerow.Interior.Color = 10079487\nEnd Sub"]