<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://excelusergroup.org/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Nick Hodge&amp;#39;s Excel Blog</title><subtitle type="html">A blog of articles, posts and pages discussing topics around Excel.  Basic, Intermediate and Advanced</subtitle><id>http://excelusergroup.org/blogs/nickhodge/atom.aspx</id><link rel="alternate" type="text/html" href="http://excelusergroup.org/blogs/nickhodge/default.aspx" /><link rel="self" type="application/atom+xml" href="http://excelusergroup.org/blogs/nickhodge/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30417.1769">Community Server</generator><updated>2008-01-15T16:12:42Z</updated><entry><title>COUNTIF SUMIF Limitations</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/06/27/countif-sumif-limitations.aspx" /><id>/blogs/nickhodge/archive/2008/06/27/countif-sumif-limitations.aspx</id><published>2008-06-27T18:05:00Z</published><updated>2008-06-27T18:05:00Z</updated><content type="html">&lt;p&gt;I&amp;#39;m sure many of you knew this but it was new to me and I came across it today, so in an effort to get it out there a bit more, i document it here.&lt;/p&gt;
&lt;p&gt;It concerns the fact that COUNTIF and SUMIF (and their 2007 plural counterparts SUMIFS and COUNTIFS) carry forward the limitation that Excel has of 15 significant digits. (As does 1-2-3 and OpenOffice)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://support.microsoft.com/kb/269370"&gt;http://support.microsoft.com/kb/269370&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I knew this limitation, but didn&amp;#39;t realise the two functions concerned followed this limit&amp;#39;&lt;/p&gt;
&lt;p&gt;I had to build an automated reconciliation model to delete off matching records. It operates through several iterations but my first one was to concatenate Date, Customer Number and Credit/Debit amount and then do a COUNTIF on that &amp;#39;Key&amp;#39;. If this resulted in 2, then I could presume a&amp;nbsp; &amp;#39;match&amp;#39; and delete the record.&lt;/p&gt;
&lt;p&gt;Imagine this then. I have data as the screenshot below&lt;/p&gt;
&lt;p&gt;&lt;img width="670" src="http://excelusergroup.org/blogs/nickhodge/08/06/CountifError.png" alt="COUNIF Error" height="130" /&gt;&lt;/p&gt;
&lt;p&gt;In D3 is the formula =A3&amp;amp;B3&amp;amp;C3&lt;br /&gt;In E3 (as you can see) is the formula =COUNTIF(D:D,D3)&lt;br /&gt;In F3 is effectively the same formula as in E3 but using the 2007 function COUNTIFS() (using just one criteria)&lt;br /&gt;In G3 is the formula =SUMIF(D:D,D3,C:C)&lt;br /&gt;In H3 is the formula =SUMIFS(C:C,D:D,D3) (Notice how in this 2007 version the parameter order is changed)&lt;br /&gt;In I3 is the formula =SUMPRODUCT(--($D$3:$D$4=D3))&lt;br /&gt;In J3 is the formula =SUMPRODUCT(($D$3:$D$4=D3)*($C$3:$C$4))&lt;/p&gt;
&lt;p&gt;What COUNTIF and SUMIF (and their plural Excel 2007 equivalents) are seeing is a string in both cells (D3 and D4) that are the same as they are just taking the first 15 digits (200806101234561). Plainly, in my scenario this is incorrect. SUMPRODUCT however sees all the digits and therefore overcomes this limitation. Correctly seeing a COUNT of 1 each and a SUM of just the single values.&lt;/p&gt;
&lt;p&gt;For a complete explanation of SUMPRODUCT you could do worse than look here&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.xldynamic.com/source/xld.SUMPRODUCT.html"&gt;http://www.xldynamic.com/source/xld.SUMPRODUCT.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;BTW: As a sideline, the formula using SUMPRODUCT worked about twice as fast&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=2378" width="1" height="1"&gt;</content><author><name>Nick_Hodge</name><uri>http://excelusergroup.org/members/Nick_5F00_Hodge/default.aspx</uri></author><category term="COUNTIF" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/COUNTIF/default.aspx" /><category term="SUMIFS" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/SUMIFS/default.aspx" /><category term="COUNTIFS" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/COUNTIFS/default.aspx" /><category term="SUMIF" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/SUMIF/default.aspx" /><category term="SUMPRODUCT" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/SUMPRODUCT/default.aspx" /></entry><entry><title>Summit in Seattle</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/04/14/summit-in-seattle.aspx" /><id>/blogs/nickhodge/archive/2008/04/14/summit-in-seattle.aspx</id><published>2008-04-14T12:45:00Z</published><updated>2008-04-14T12:45:00Z</updated><content type="html">&lt;p&gt;It&amp;#39;s been some time since I posted a blog post and this is a little lame when it comes to Excel, but we are all (MVPs) in Seattle at the Global Summit this week and if there is anything we are allowed to post under our NDAs I will try and post it here.&lt;/p&gt;
&lt;p&gt;Never know until we get there what will be allowed public domain and we have to be real careful, but I will certainly be pointing the Excel Team to the v.Next forum if you still have some ideas for that.&lt;/p&gt;
&lt;p&gt;Looking forward to a great week at the &amp;#39;Excel coal face&amp;#39;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=1767" width="1" height="1"&gt;</content><author><name>Nick_Hodge</name><uri>http://excelusergroup.org/members/Nick_5F00_Hodge/default.aspx</uri></author><category term="MVP Summit" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/MVP+Summit/default.aspx" /></entry><entry><title>Playing with OpenAsTextStream</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/03/13/playing-with-openastextstream.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="33890" href="http://excelusergroup.org/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.00.12.38/ParseTextFiles.zip" /><id>/blogs/nickhodge/archive/2008/03/13/playing-with-openastextstream.aspx</id><published>2008-03-13T19:35:00Z</published><updated>2008-03-13T19:35:00Z</updated><content type="html">&lt;p&gt;We produce individual text files for new items to go into our catalogue. These are sent to the creative people for laying out on the page. One file contains the Item#, Description, Text and Bullets for one item and is named with that item&amp;#39;s number. Of course, for page layout it is good for them to copy and paste the text this way. It looks as below:&lt;/p&gt;
&lt;p&gt;12345E&lt;/p&gt;
&lt;p&gt;2500PSI 15LPM Petrol-Powered Pressure Washer&lt;/p&gt;
&lt;p&gt;This pressure washer, powered by a Honda GX160 engine, will blast away even the most stubborn dirt with ease. Supplied with reinforced rubber hose and lance with four interchangeable nozzles.&lt;br /&gt;* 2500PSI&lt;br /&gt;* 15 LPM&lt;br /&gt;* Comet Axial pump&lt;br /&gt;* Downstream Chemical Injector&lt;br /&gt;* Ship Wt: 68kg&lt;/p&gt;
&lt;p&gt;Of course, when it comes to the website, we need a much more formal record/field (row/column) structure. The challenge today was to parse the files (iterating over a folder containing the files), which also have random blank lines into a sensible structure in Excel for uploading onto the web. Whilst not in my job description, it was a challenge I wanted to take as it was a long time since I worked with text files and I don&amp;#39;t think I&amp;#39;ve ever worked with the FileSystem object from the Microsoft Scripting Runtime Library.&lt;/p&gt;
&lt;p&gt;Of course, with any parsing job, the data is never straightforward. I&amp;#39;ve already mentioned the blank lines, but they also wanted the * changed to &amp;lt;li&amp;gt; to create an html bullet and the Ship Wt: line stripped off as that has it&amp;#39;s own field. The split was across three rows, containing Item#, Item Title and Web Text.&lt;/p&gt;
&lt;p&gt;When coding I always prefer to use early binding, where you manually set a reference via the VBE to the library you want to use, in this case the Microsoft Scripting Runtime. I do this as it gives you the advantage of intellisense if you are not sure of the object, methods, etc. So my code at development time would look like this&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; ParseFile()
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; fsys &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; FileSystemObject, fsfile &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; File, stream &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; TextStream

    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Set FileSystemObject variables (Early binding)&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsys = &lt;span style="COLOR:#0000ff;"&gt;New&lt;/span&gt; FileSystemObject
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsfile = fsys.GetFile(sFolderName &amp;amp; sParseFile)
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; stream = fsfile.OpenAsTextStream(1, 0)

&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This way, just typing fsys. in the future code will fire up the properties, methods, etc of the FileSystemObject, very handy when you don&amp;#39;t know them. Generally though I find deploying early binding is a pain, as you have to remember to set the reference on each machine before running the code, so at runtime I change the variable types to generic &amp;#39;Objects&amp;#39; and then use the CreatObject function to create the FileSytemObject as below&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; ParseFile()
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; fsys &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Object&lt;/span&gt;, fsfile &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Object&lt;/span&gt;, stream &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Object&lt;/span&gt;

    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Set FileSystemObject variables (Late binding)&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsys = CreateObject(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Scripting.FileSystemObject&amp;quot;&lt;/span&gt;)
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsfile = fsys.GetFile(sFolderName &amp;amp; sParseFile)
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; stream = fsfile.OpenAsTextStream(1, 0)

&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The OpenAsTextStream method of the File object is very nice to use, you can either read or write the file, you can check each character, complete lines or all the text at once. You get AtEndOfLine and AtEndOfStream boolean properties of the stream object so you can process until one and/or both of these properties are true.&lt;/p&gt;
&lt;p&gt;Now I&amp;#39;m making no claims for quality of coding, but the below is the full, deployed code that works for the files we produce. In testing too, it parsed the data from 150 txt files into the correct columns and rows in just a few seconds, much faster than the old copy and paste!&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:600px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;HEIGHT:379px;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;Option&lt;/span&gt; Explicit

&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; ParseFile()
&lt;span style="COLOR:#008000;"&gt;&amp;#39;**************************************************************************&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39; Code written by Nick Hodge 12th March 2008&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;V1.0 into production same day. versions below.&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;V1.1 added error handling and check for file name ending in &amp;#39;E&amp;#39; (13/3/2007)&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;V1.2 added checking for * as first character of line and change it to &amp;lt;li&amp;gt;&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;for an html bullet, also strip out line starting Ship Wt. (13/3/2007)&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;**************************************************************************&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Navigate to a folder and the code will iterate over any text files taking the first&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;line with text in it and assigning it to the strLine1 variable. It does the same for&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;second and third lines and then assigns them to columns 1, 2, 3 in a new workbook&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;laying them out in proper field/record format for importing to web&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;File format should have item number as first line (no matter if blank lines above&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Product title on second line, no matter if blanks above and rest of copy after that&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;File and folder name variables&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; sFullPathFilename &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;, sFolderName &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;, sParseFile &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;New workbook and worksheet variables&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; wb &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; Workbook, wks &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; Worksheet
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Counter to count iterations, used in row placement on sheet and counter for postion&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;of slash in path name (before filename)&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; lCounter &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Long&lt;/span&gt;, lSlashPosition &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Long&lt;/span&gt;, iwksCount &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Filesytem object variables to hold file, textstream, etc.&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; fsys &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; FileSystemObject, fsfile &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; File, stream &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; TextStream
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Variable to hold lines of text for later assignment to worksheet&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; strLine1 &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;, strLine2 &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;, strLine3 &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;, strTemp &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Booleans to stop loop after line 1 found, etc.&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; bLine1Fnd &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Boolean&lt;/span&gt;, bLine2Fnd &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Boolean&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;On&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Error&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;GoTo&lt;/span&gt; errHandler

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Get folder to use by clicking on file&lt;/span&gt;
sFullPathFilename = Application.GetOpenFilename(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Text Files, *.txt&amp;quot;&lt;/span&gt;, , &lt;span style="COLOR:#006080;"&gt;&amp;quot;Select any file in the folder&amp;quot;&lt;/span&gt;)

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Check to see selection made&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; sFullPathFilename = &lt;span style="COLOR:#006080;"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
    MsgBox &lt;span style="COLOR:#006080;"&gt;&amp;quot;You must click on any file in the folder&amp;quot;&lt;/span&gt;, vbOKOnly, &lt;span style="COLOR:#006080;"&gt;&amp;quot;No Folder Selected&amp;quot;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Exit&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Get position of last slash and parse folder from this&lt;/span&gt;
lSlashPosition = InStrRev(sFullPathFilename, &lt;span style="COLOR:#006080;"&gt;&amp;quot;\&amp;quot;&lt;/span&gt;, -1)
&lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; lSlashPosition = 0 &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
    MsgBox &lt;span style="COLOR:#006080;"&gt;&amp;quot;We cannot recognise the folder name, exiting procedure&amp;quot;&lt;/span&gt;, vbOKOnly + vbExclamation, &lt;span style="COLOR:#006080;"&gt;&amp;quot;Error&amp;quot;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Exit&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Open workbook and set variables&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; wb = Workbooks.Add
&lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; wks = wb.Worksheets(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;)

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Change sheet name&lt;/span&gt;
wks.Name = &lt;span style="COLOR:#006080;"&gt;&amp;quot;Data&amp;quot;&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Switch off application events&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt; Application
    .ScreenUpdating = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
    .DisplayAlerts = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
   
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Delete surplus worksheets&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt; wb
    &lt;span style="COLOR:#0000ff;"&gt;For&lt;/span&gt; iwksCount = .Worksheets.Count &lt;span style="COLOR:#0000ff;"&gt;To&lt;/span&gt; 1 &lt;span style="COLOR:#0000ff;"&gt;Step&lt;/span&gt; -1
        &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; .Worksheets(iwksCount).Name &amp;lt;&amp;gt; &lt;span style="COLOR:#006080;"&gt;&amp;quot;Data&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
        .Worksheets(iwksCount).Delete
        &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Next&lt;/span&gt; iwksCount
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Set headings and bold&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt; wks
    .Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;A1&amp;quot;&lt;/span&gt;).Value = &lt;span style="COLOR:#006080;"&gt;&amp;quot;ItemNo&amp;quot;&lt;/span&gt;
    .Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;B1&amp;quot;&lt;/span&gt;).Value = &lt;span style="COLOR:#006080;"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;
    .Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;C1&amp;quot;&lt;/span&gt;).Value = &lt;span style="COLOR:#006080;"&gt;&amp;quot;WebText&amp;quot;&lt;/span&gt;
    .Rows(&lt;span style="COLOR:#006080;"&gt;&amp;quot;1:1&amp;quot;&lt;/span&gt;).Font.Bold = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt;

sFolderName = Left(sFullPathFilename, lSlashPosition)

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Start iteration of folder using folder name and files ending in E.txt&lt;/span&gt;
sParseFile = Dir(sFolderName &amp;amp; &lt;span style="COLOR:#006080;"&gt;&amp;quot;*E.txt&amp;quot;&lt;/span&gt;)

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Intialise counter to 2 which starts it on second row, below titles&lt;/span&gt;
lCounter = 2

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Do for each file Dir function is called recursively and returns &amp;quot;&amp;quot; when no more files match&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;While&lt;/span&gt; sParseFile &amp;lt;&amp;gt; &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Initialise booleans&lt;/span&gt;
bLine1Fnd = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
bLine2Fnd = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;

    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Set FileSystemObject variables (Late binding)&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsys = CreateObject(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Scripting.FileSystemObject&amp;quot;&lt;/span&gt;)
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsfile = fsys.GetFile(sFolderName &amp;amp; sParseFile)
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; stream = fsfile.OpenAsTextStream(1, 0)

    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Do so long as the endoffile marker is false, sets first line of text&lt;/span&gt;
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Accounts for blank lines&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;While&lt;/span&gt; stream.AtEndOfStream = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;While&lt;/span&gt; bLine1Fnd = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
            strTemp = stream.ReadLine
                &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; strTemp &amp;lt;&amp;gt; &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
                    strLine1 = strTemp
                    bLine1Fnd = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
                    strTemp = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;Loop&lt;/span&gt;
            &lt;span style="COLOR:#008000;"&gt;&amp;#39;sets second line of text, accounts for blank lines&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;Do&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;While&lt;/span&gt; bLine2Fnd = &lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
            strTemp = stream.ReadLine
                &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; strTemp &amp;lt;&amp;gt; &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
                    strLine2 = strTemp
                    bLine2Fnd = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
                    strTemp = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;Loop&lt;/span&gt;
            &lt;span style="COLOR:#008000;"&gt;&amp;#39;Once 1st and 2nd lines are full then take averything else, line by line&lt;/span&gt;
            strTemp = stream.ReadLine
            &lt;span style="COLOR:#008000;"&gt;&amp;#39;Check if line is ship wt., if so discard&lt;/span&gt;
                &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; Left(UCase(strTemp), 6) = &lt;span style="COLOR:#006080;"&gt;&amp;quot;* SHIP&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt; strTemp = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
                &lt;span style="COLOR:#008000;"&gt;&amp;#39;Build 3rd lines changing * to &amp;lt;li&amp;gt; for html bullet, else just add the next line to the copy&lt;/span&gt;
                &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; strTemp &amp;lt;&amp;gt; &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; Left(strTemp, 1) = &lt;span style="COLOR:#006080;"&gt;&amp;quot;*&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
                        strTemp = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;lt;li&amp;gt;&amp;quot;&lt;/span&gt; &amp;amp; Mid(strTemp, 2, Len(strTemp) - 1)
                        strLine3 = strLine3 &amp;amp; strTemp &amp;amp; Chr(10)
                    &lt;span style="COLOR:#0000ff;"&gt;Else&lt;/span&gt;
                        strLine3 = strLine3 &amp;amp; strTemp &amp;amp; Chr(10)
                    &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;
                &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;
                
    &lt;span style="COLOR:#0000ff;"&gt;Loop&lt;/span&gt;
    
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Close stream and release object variables&lt;/span&gt;
    stream.Close

    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; stream = &lt;span style="COLOR:#0000ff;"&gt;Nothing&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsfile = &lt;span style="COLOR:#0000ff;"&gt;Nothing&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;Set&lt;/span&gt; fsys = &lt;span style="COLOR:#0000ff;"&gt;Nothing&lt;/span&gt;
    
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Assign the strings to worksheet&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt; wks
        .Cells(lCounter, 1).Value = strLine1
        .Cells(lCounter, 2).Value = strLine2
        .Cells(lCounter, 3).Value = Left(strLine3, Len(strLine3) - 1)
        .Columns.AutoFit
        .Columns(3).ColumnWidth = 200
        .Rows.AutoFit
    &lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt;
    
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Clear strings for next iteration&lt;/span&gt;
    strLine1 = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    strLine2 = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    strLine3 = &lt;span style="COLOR:#006080;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;
    
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Increment counter so text is placed on next row&lt;/span&gt;
    lCounter = lCounter + 1

    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Start next iteration of files in folder&lt;/span&gt;
    sParseFile = Dir()

&lt;span style="COLOR:#0000ff;"&gt;Loop&lt;/span&gt;
    
    &lt;span style="COLOR:#008000;"&gt;&amp;#39;Turn application events back on&lt;/span&gt;
    .ScreenUpdating = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
    .DisplayAlerts = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt;

MsgBox &lt;span style="COLOR:#006080;"&gt;&amp;quot; Successfully parsed &amp;quot;&lt;/span&gt; &amp;amp; lCounter - 2 &amp;amp; &lt;span style="COLOR:#006080;"&gt;&amp;quot; *.txt files&amp;quot;&lt;/span&gt; &amp;amp; Chr(13) &amp;amp; &lt;span style="COLOR:#006080;"&gt;&amp;quot;From &amp;quot;&lt;/span&gt; &amp;amp; sFolderName, _
    vbInformation + vbOKOnly, &lt;span style="COLOR:#006080;"&gt;&amp;quot;Parsed Successfully&amp;quot;&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;Exit&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Error handling routine to exit gracefully&lt;/span&gt;
errHandler:

MsgBox &lt;span style="COLOR:#006080;"&gt;&amp;quot;There has been an error, please advise add-in creator&amp;quot;&lt;/span&gt; &amp;amp; Chr(13) &amp;amp; _
    &lt;span style="COLOR:#006080;"&gt;&amp;quot;The routine failed on: &amp;quot;&lt;/span&gt; &amp;amp; sParseFile, vbOKOnly + vbCritical

&lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Not&lt;/span&gt; wb &lt;span style="COLOR:#0000ff;"&gt;Is&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Nothing&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Then&lt;/span&gt;
    wb.Close SaveChanges:=&lt;span style="COLOR:#0000ff;"&gt;False&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;If&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt; Application
    .DisplayAlerts = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
    .ScreenUpdating = &lt;span style="COLOR:#0000ff;"&gt;True&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;With&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;Exit&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you want to download and try the file &lt;font color="#ff0000"&gt;&lt;strong&gt;(Excel 2007 Only)&lt;/strong&gt;&lt;/font&gt;&amp;nbsp;I have attached the working xlsm file to this post&amp;nbsp;(It is actually deployed as an xlam add-in) and 20 demo text files. Just place the text files in a folder and then go to the Marketing tab (Yes, I even wrote a ribbon customisation for it!) and press the button. It will ask you to navigate to any file in the folder and the will take each file in turn using the Dir() function and parse the text into a new Excel workbook.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=1238" width="1" height="1"&gt;</content><author><name>Nick_Hodge</name><uri>http://excelusergroup.org/members/Nick_5F00_Hodge/default.aspx</uri></author><category term="Parse Text Files" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Parse+Text+Files/default.aspx" /><category term="FileSystemObject" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/FileSystemObject/default.aspx" /><category term="Scripting" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Scripting/default.aspx" /></entry><entry><title>Questions on customising the ribbon</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/03/02/questions-on-customising-the-ribbon.aspx" /><id>/blogs/nickhodge/archive/2008/03/02/questions-on-customising-the-ribbon.aspx</id><published>2008-03-02T10:52:00Z</published><updated>2008-03-02T10:52:00Z</updated><content type="html">&lt;p&gt;I have, via the blog contact form received three questions from Milan, these were&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Can you remove the Office Button?&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Can you link a combobox (on the ribbon) to a cell/range?&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Can you link a label (on the ribbon) to a cell?&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;The answer to No.1 was answered in the &lt;a class="" title="Customise the Ribbon Part 2" href="http://excelusergroup.org/blogs/nickhodge/archive/2008/01/31/ribbon-step-by-step-part-2-begin-customisation.aspx" target="_blank"&gt;2nd of my series on customising&lt;/a&gt; the ribbon. In the section under Full Dictator Application.&lt;/p&gt;
&lt;p&gt;No. 2 is yes you very much can but it is not a simple process like having a &amp;#39;link&amp;#39; property or similar. The write-up below demonstrates how you would take a range of cells (BoxList @&amp;nbsp;$A$!:$A$10)&amp;nbsp;to fill the combobox and then display the selected item in a cell on the worksheet ($D$1).&lt;/p&gt;
&lt;p&gt;A comboBox has a DropDown (so is similar to a dropDown ribbon control), but allows extra entries to be typed in at runtime.&lt;/p&gt;
&lt;p&gt;The first thing we need to do is set up the RibbonX in the file (&lt;a class="" href="http://excelusergroup.org/blogs/nickhodge/archive/2008/01/31/ribbon-step-by-step-part-2-begin-customisation.aspx" target="_blank"&gt;for detail, see here&lt;/a&gt;). For this demo I am setting startFromScratch=&amp;quot;true&amp;quot;, so all we should have from the below RibbonX is a single tab, with one group and one comboBox. Notice too, that at this stage the comboBox is empty. This is because we will be building this when the workbook opens, using a Workbook_Open() event&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tab&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Demo Tab&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;group&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Combobox&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;comboBox&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Combobox1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Cell Link&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;getItemID&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_getItemID&amp;quot;&lt;/span&gt;
                        &lt;span style="COLOR:#ff0000;"&gt;getItemLabel&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_getItemLabel&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;getItemCount&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_itemCount&amp;quot;&lt;/span&gt; 
                            &lt;span style="COLOR:#ff0000;"&gt;onChange&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_onChange&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;group&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tab&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice that we are using four &amp;#39;callback&amp;#39; attributes to populate the comboBox and to &amp;#39;link&amp;#39; it to a cell. These are used for the following reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;getItemID() = Used to &amp;#39;set&amp;#39; the unique ID necessary for every control on the ribbon (It is tough to think that the names &amp;#39;getxxx&amp;#39; are actually better though of as &amp;#39;set&amp;#39;. It is meaning the Ribbon needs to &amp;#39;get&amp;#39; rather than you need to &amp;#39;set&amp;#39; if that makes sense?)&lt;/li&gt;
&lt;li&gt;getItemLabel() = Used to &amp;#39;set&amp;#39; the text of each item displayed in the control&lt;/li&gt;
&lt;li&gt;getItemCount() = Used to &amp;#39;set&amp;#39; the number of items the control should expect to display.&lt;/li&gt;
&lt;li&gt;onChange()= Used to provide the &amp;#39;link&amp;#39; to a cell on the worksheet. This fires each time the control is changed.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Next we generate the callback signatures for these by pressing the button in the Custom UI Editor. &lt;font color="#ff0000"&gt;You will notice below&amp;nbsp;that the UI editor does not generate a getItemID callback. this is a bug, the signature is given below to help you.&lt;/font&gt;&lt;/p&gt;&lt;font color="#000000"&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemID (NOT GIVEN BY CALLBACK GENERATOR)&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_getItemID(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, index &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; ID)
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemLabel&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_getItemLabel(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, index &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; returnedVal)
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemCount&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_itemCount(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; returnedVal)
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt;

&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 onChange&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_onChange(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, text &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;)
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We will use a Workbook_Open() event to build the array of items to load into the control. This event, as the name implies, fires when the workbook is opened. It is placed in the &amp;#39;ThisWorkbook&amp;quot; module.&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;Option&lt;/span&gt; Explicit
&lt;span style="COLOR:#008000;"&gt;&amp;#39;There are two global variables at the top of a standard module&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;iItemcount and vRngValues&lt;/span&gt;

&lt;span style="COLOR:#0000ff;"&gt;Private&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; Workbook_Open()
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Counter variable&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Dim&lt;/span&gt; x &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Counts the cells in the range, used later to set no. of Items in control.&lt;/span&gt;
iItemcount = Worksheets(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;).Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;BoxList&amp;quot;&lt;/span&gt;).Cells.Count - 1
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Re-Dimension the dynamic array to it&amp;#39;s actual size.&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;ReDim&lt;/span&gt; vRngValues(iItemcount)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Build the array&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;For&lt;/span&gt; x = 0 &lt;span style="COLOR:#0000ff;"&gt;To&lt;/span&gt; iItemcount
    vRngValues(x) = Worksheets(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;).Cells(1 + x, 1).Value
&lt;span style="COLOR:#0000ff;"&gt;Next&lt;/span&gt; x
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now we will have the range &amp;#39;BoxList&amp;#39; assigned to a one-dimensional array and the count of items, in public variables available to all code in the project. (remember this for later)&lt;/p&gt;
&lt;p&gt;First let&amp;#39;s advise the control how many items we will need in the control, using the global integer variable iItemcount (built in the Workbook_Open() event)&amp;nbsp;and the getItemCount() callback, as below. (The comments explain what the procedure does, in fact we are using just one line of code!). These callbacks are all placed in a standard module.&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemCount&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_itemCount(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; returnedVal)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Use the global variable collected in the Workbook_Open()&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;assigning it to the returnedVal parameter&lt;/span&gt;
    returnedVal = iItemcount
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next, as each item in the control (and the control itself for that matter) need a unique ID we will build this next using the getItemID callback, as below. Again the comments explain what is happening.&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemID&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_getItemID(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, index &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; ID)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Set the ID parameter in the callback signature to each &amp;#39;index&amp;#39;&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;in the signature. We are adding cmbBox text to make it unique&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;as using just a number may clash with other controls/items&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;indexes in controls are zero based&lt;/span&gt;
    ID = &lt;span style="COLOR:#006080;"&gt;&amp;quot;cmbBox&amp;quot;&lt;/span&gt; &amp;amp; index
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Next we will write the last piece of code to actually build it (the fourth will be used as we use the control). This is the getItemLabel callback (below)&amp;nbsp;that &amp;#39;sets&amp;#39; the actual text that will be displayed in the combobox. (Again, just one line of code!)&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 getItemLabel&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_getItemLabel(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, index &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;Integer&lt;/span&gt;, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; returnedVal)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Sets the returnVal parameter, which carries the text back to the control&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;This fires for each control &amp;#39;item&amp;#39;, so the &amp;#39;index&amp;#39; parameter&lt;/span&gt;
&lt;span style="COLOR:#008000;"&gt;&amp;#39;provides a zero based index for the current item, which we use in the code&lt;/span&gt;
    returnedVal = vRngValues(index)
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Lastly, we will use the onChange() callback to assign the selected option from the comboBox, to a cell (D1) on our worksheet.&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for Combobox1 onChange&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; cmb_onChange(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, text &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;String&lt;/span&gt;)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Set the &amp;#39;text&amp;#39; parameter to a cell value&lt;/span&gt;
    Worksheets(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;).Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;D1&amp;quot;&lt;/span&gt;).Value = text
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That&amp;#39;s all you need, job done! The image below shows the result.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://excelusergroup.org/blogs/nickhodge/08/03/02/comboboxresult.png"&gt;&lt;img src="http://excelusergroup.org/blogs/nickhodge/08/03/02/comboboxresult.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lastly, question No.3. I am hoping that the questioner was referring to the labelControl. This is used simply as a textual control that can act as a label&amp;nbsp;to anything else on a group. If so then yes, all we need to do is set the control&amp;#39;s getLabel attribute using it&amp;#39;s callback. I have added the ribbonX to the previous example, (it&amp;#39;s just one line) and the callback, added to a standard module is below that, which picks up the value from D2.&lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tab&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Demo Tab&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;group&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Combobox&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;comboBox&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Combobox1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;Cell Link&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;getItemID&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_getItemID&amp;quot;&lt;/span&gt;
                        &lt;span style="COLOR:#ff0000;"&gt;getItemLabel&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_getItemLabel&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;getItemCount&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_itemCount&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;onChange&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;cmb_onChange&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;labelControl&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;myLabel&amp;quot;&lt;/span&gt; &lt;span style="COLOR:#ff0000;"&gt;getLabel&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;=&amp;quot;lbl_getLabel&amp;quot;&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;group&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tab&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="COLOR:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The getLabel VBA callback&lt;/p&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:Consolas, &amp;#39;Courier New&amp;#39;, Courier, Monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#008000;"&gt;&amp;#39;Callback for myLabel getLabel&lt;/span&gt;
&lt;span style="COLOR:#0000ff;"&gt;Sub&lt;/span&gt; lbl_getLabel(control &lt;span style="COLOR:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl, &lt;span style="COLOR:#0000ff;"&gt;ByRef&lt;/span&gt; returnedVal)
&lt;span style="COLOR:#008000;"&gt;&amp;#39;Assigns the value in cell D2 to the returnVal parameter&lt;/span&gt;
    returnedVal = Worksheets(&lt;span style="COLOR:#006080;"&gt;&amp;quot;Sheet1&amp;quot;&lt;/span&gt;).Range(&lt;span style="COLOR:#006080;"&gt;&amp;quot;D2&amp;quot;&lt;/span&gt;).Value
&lt;span style="COLOR:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;
&lt;p&gt;The resulting label from cell D2&lt;/p&gt;
&lt;p&gt;&lt;a href="http://excelusergroup.org/blogs/nickhodge/08/03/02/labelcontrol.png"&gt;&lt;img src="http://excelusergroup.org/blogs/nickhodge/08/03/02/labelcontrol.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Hopefully this goes someway to answering the OP questions and helps to further everyone&amp;#39;s understanding of customising the Ribbon in Office 2007.&lt;/p&gt;
&lt;p&gt;More to come.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=1105" width="1" height="1"&gt;</content><author><name>Nick_Hodge</name><uri>http://excelusergroup.org/members/Nick_5F00_Hodge/default.aspx</uri></author><category term="RibbonX" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/RibbonX/default.aspx" /><category term="Ribbon" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Ribbon/default.aspx" /><category term="Excel 2007" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Excel+2007/default.aspx" /><category term="comboBox" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/comboBox/default.aspx" /></entry><entry><title>Maybe faulting add-ins are a thing of the past?</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/02/22/maybe-faulting-add-ins-are-a-thing-of-the-past.aspx" /><id>/blogs/nickhodge/archive/2008/02/22/maybe-faulting-add-ins-are-a-thing-of-the-past.aspx</id><published>2008-02-22T09:12:00Z</published><updated>2008-02-22T09:12:00Z</updated><content type="html">&lt;p&gt;I was intrigued to see, under the threat from competition commissions around the World, that Microsoft are opening up parts of their code-base and engineering to competitors to make the whole operating system and main applications (Office is mentioned), work better with 3rd party products.&lt;/p&gt;
&lt;p&gt;I for one hope people like Adobe gets involved with this as a good proportion of the posts in the public GrashesGPFs group on MSFT&amp;#39;s servers, relates to faulting add-ins opening with Excel.&lt;/p&gt;
&lt;p&gt;Hopefully good news?&lt;/p&gt;
&lt;p&gt;Here is the article from Reuters.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://uk.reuters.com/article/technologyNews/idUKWNAS191120080222?feedType=nl&amp;amp;feedName=ukmorningdigest"&gt;http://uk.reuters.com/article/technologyNews/idUKWNAS191120080222?feedType=nl&amp;amp;feedName=ukmorningdigest&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://excelusergroup.org/aggbug.aspx?PostID=1032" width="1" height="1"&gt;</content><author><name>Nick_Hodge</name><uri>http://excelusergroup.org/members/Nick_5F00_Hodge/default.aspx</uri></author><category term="Add-Ins" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Add-Ins/default.aspx" /><category term="Microsoft" scheme="http://excelusergroup.org/blogs/nickhodge/archive/tags/Microsoft/default.aspx" /></entry><entry><title>Ribbon, Step-by-Step. Part 4 (Exploring Other Controls)</title><link rel="alternate" type="text/html" href="/blogs/nickhodge/archive/2008/02/14/ribbon-step-by-step-part-4-exploring-other-controls.aspx" /><id>/blogs/nickhodge/archive/2008/02/14/ribbon-step-by-step-part-4-exploring-other-controls.aspx</id><published>2008-02-14T23:56:36Z</published><updated>2008-02-14T23:56:36Z</updated><content type="html">&lt;p&gt;So we&amp;#39;ve explored the file formats, created the shell for a dictator application, made some basic ribbon, tab, group and control changes and customised the Office menu. We&amp;#39;ve re-purposed some Microsoft controls to our own use and now we will be running at pace through some of the other controls available to you. I doubt we will cover all of them, but you can &lt;a href="http://excelusergroup.org/files/folders/2007wb/entry212.aspx" target="_blank"&gt;download a bunch of my files here&lt;/a&gt;, which demonstrate more of what you are learning here and also contain a &amp;#39;popular&amp;#39; control and attribute listing. So...let&amp;#39;s get started.&lt;/p&gt; &lt;h3&gt;The Core Of Our Model&lt;/h3&gt; &lt;p&gt;As usual we will start with our basic building blocks of declaring a customUI and the ribbon itself, it&amp;#39;s startFromScratch attribute and a custom tab, which we will place after the built-in add-ins tab, like so:&lt;/p&gt; &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onLoad&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;loadRibbon&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nick&amp;#39;s Tab&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insertAfterMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TabAddIns&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Z&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notice that for the first time we have used the onLoad attribute of the customUI which will fire the callback VBA called loadRibbon. This will enable us to capture the ribbon object and change stuff later &amp;#39;on the fly&amp;#39; by invalidating it.&lt;/p&gt;
&lt;p&gt;Hopefully by now you are able to read and understand this basic format that makes the core of any customisation, remember, you must have an id for every control, within a collection, (remember the ribbon can only be singular, so doesn&amp;#39;t need one), and this must be unique in your project and either is a custom (created by you) id, or a built-in (created by Microsoft) idMso. You will find this rule throughout your customisations, for example, above we use insertAfterMso meaning insert this tab after the built-in &amp;#39;add-ins&amp;#39; one.&lt;/p&gt;
&lt;h3&gt;Adding A Group and Button&lt;/h3&gt;
&lt;p&gt;To the same code above, we can add our first custom group with a custom button. This button has it&amp;#39;s own onAction callback to VBA to handle the code when the button is pressed. The code at this stage is as below:&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onLoad&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;loadRibbon&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
      &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nick&amp;#39;s Tab&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insertAfterMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TabAddIns&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Z&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt; 
                &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;OpenFileButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;screentip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the screentip of button1&amp;quot;&lt;/span&gt; 
                    &lt;span style="color:#ff0000;"&gt;size&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;large&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;supertip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the supertip of button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt; 
                &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;OpenFileButton&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;screentip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the screentip of button1&amp;quot;&lt;/span&gt; 
                    &lt;span style="color:#ff0000;"&gt;size&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;large&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;supertip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the supertip of button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The group has an id, is visible and has a label, which is the description that sits at the bottom on the group, as the below image of our &amp;#39;growing tab shows. Hopefully you can also pick the other &amp;#39;bits&amp;#39; from the code that created it, e.g. The tab label, where it&amp;#39;s positioned, the size of the button, (large), that we have &amp;#39;nicked&amp;#39; the imageMso for file&amp;gt;open and what a screentip and supertip look like.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://excelusergroup.org/blogs/nickhodge/08/02/14/grouplabelbits.png" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Having a &amp;#39;large&amp;#39; button exposes another feature of the ribbon and that is re-sizing. It will endeavour, as above to show it using it&amp;#39;s full size, but if the overall size of the application window does not allow, it will first drop it&amp;#39;s label and then shrink it&amp;#39;s size down to small.&lt;/p&gt;
&lt;p&gt;At this stage of course, loading the file will fire the onLoad callback and as there is no code it will return an error that the relevant code is not available. We&amp;#39;ll take a look at the callback code once we have built our tab.&lt;/p&gt;
&lt;h3&gt;Buttons, Boxes and Separators.&lt;/h3&gt;
&lt;p&gt;One button in a group, as in the previous section is fine, but as soon as you add more buttons in a group, coupled with the &amp;#39;re-size&amp;#39; effect and we must use some &amp;#39;hidden&amp;#39; controls, to stop the controls from flowing in undesirable directions. We use Boxes to achieve that, together with separators. Below is the code to add a new group (&amp;quot;Group2&amp;quot;) and two &amp;#39;sets&amp;#39; of three buttons, in vertical boxes with a separator dividing the two &amp;#39;sets&amp;#39; of three. Whilst you cannot see the boxes, I have drawn them in the resulting tab image below the code, so you can visualise it in your own mind. You can of course see the &amp;#39;vertical&amp;#39; separator. (It is only a vertical separator as it sits between two vertically aligned boxes, even in the code as you can see!).&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onLoad&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;loadRibbon&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nick&amp;#39;s Tab&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insertAfterMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TabAddIns&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Z&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt;
                        &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;OpenFileButton&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;screentip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the screentip of button1&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;size&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;large&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;supertip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the supertip of button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Boxes and Buttons&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button2B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button3B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;separator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;separator1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonC&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src="http://excelusergroup.org/blogs/nickhodge/08/02/14/boxesandbuttons1.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;If we now do the same with two sets of buttons in horizontal boxes, you will hopefully see the difference, both in the code and the ribbon image. Remember, horizontal buttons do not have a corresponding horizontal separator, separators do not have a style attribute...maybe v.Next!&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onLoad&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;loadRibbon&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nick&amp;#39;s Tab&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insertAfterMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TabAddIns&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Z&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt;
                        &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;OpenFileButton&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;screentip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the screentip of button1&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;size&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;large&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;supertip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the supertip of button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;VBoxes and Buttons&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button2B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button3B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;separator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;separator1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonC&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;

                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;HBoxes and Buttons&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button H1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button2C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button H2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box4&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box5&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHZ&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HZ&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHX&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HX&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;

            &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://excelusergroup.org/blogs/nickhodge/08/02/14/horizontalbox.png" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You may notice in the above code snippets that we are using the same callback on the button onAction attribute. This allows us to make a decision based on the button pressed, using the passed &amp;#39;parent buttons&amp;#39; id, like so. For a button callback there are three captured properties, id, context and tag. Any or all of these can be used, stored in variables, on worksheets, in range names, etc.&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;Sub&lt;/span&gt; OpenFileButton(control &lt;span style="color:#0000ff;"&gt;As&lt;/span&gt; IRibbonControl)
    &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt; control.ID = &lt;span style="color:#006080;"&gt;&amp;quot;button1&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;Then&lt;/span&gt;
        &lt;span style="color:#008000;"&gt;&amp;#39;do this&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;Else&lt;/span&gt;
        &lt;span style="color:#008000;"&gt;&amp;#39;do this&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;If&lt;/span&gt;
&lt;span style="color:#0000ff;"&gt;End&lt;/span&gt; Sub&lt;/pre&gt;&lt;/div&gt;
&lt;h3&gt;The Gallery and dialogLauncher Controls.&lt;/h3&gt;
&lt;p&gt;Lastly for this part, we will look at two new controls in this first iteration of the ribbon. The gallery, (this is like the styles dropdown image store) and the dialogLauncher, which is a container control, carrying a button, that looks like a little diagonal arrow in the bottom right hand corner of a group, allowing you to fire a dialog (built-in or custom) on it being pressed.&lt;/p&gt;
&lt;h4&gt;The Gallery&lt;/h4&gt;
&lt;p&gt;Currently you cannot customise built-in galleries, but you can build your own and load your image collateral through the Custom UI Editor. This part is simple, just open the editor, click on the image toolbar button, navigate to your image files and select OK. This will load them in the side of the UI editor so they an be selected and loaded into the file. A gallery is once again a container control, with &amp;#39;items&amp;#39; below it that actually hold the images and fire callbacks, etc. It can also contain buttons, but these must appear below any items and they are the menu options that sit below the gallery items, like &amp;#39;New Cell Style,,,&amp;#39; on the cell style gallery on the home tab.&lt;/p&gt;
&lt;p&gt;The added code is below, with the image of the resulting controls below that:&lt;/p&gt;
&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;background-color:#f4f4f4;"&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;customUI&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onLoad&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;loadRibbon&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/office/2006/01/customui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ribbon&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;startFromScratch&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tabs&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
            &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;tab&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;myTab1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Nick&amp;#39;s Tab&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;insertAfterMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TabAddIns&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Z&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;visible&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keytip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt;
                        &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;OpenFileButton&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;screentip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the screentip of button1&amp;quot;&lt;/span&gt; 
                        &lt;span style="color:#ff0000;"&gt;size&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;large&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;supertip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;This is the supertip of button1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
    
                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;VBoxes and Buttons&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button2B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button3B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button 3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;separator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;separator1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;vertical&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button A&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button B&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonC&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;

                &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Group3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;HBoxes and Buttons&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button1C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button H1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;button2C&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button H2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;imageMso&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;FileOpen&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box4&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HA&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HB&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;box5&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;boxStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;horizontal&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHZ&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HZ&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;
                        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;button&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;buttonHX&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;label&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Button HX&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;onAction&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ButtonPressedMsgBox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;box&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;

                    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;group&lt;/span&gt; &lt;span style="color:#ff0