Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to prevent MS Access from changing the selected ribbon tab automatically when using a custom ribbon?

When a custom UI XML file is used to add several custom ribbon tabs in Access, the selected ribbon tab changes back to the first custom tab whenever a form is closed.

We load a custom ribbon programatically from VBA. I've create an accdb that reproduces the problem. The folder also includes an XML file that contains the ribbon definition. It must be in the same directory as the .accdb file.

The problem can easily be demonstrated:

  1. open the database RibbonTest.accdb,
  2. switch to Tab2 and open Form2 using the button on the ribbon and
  3. close Form2.

Notice that Tab1 is now active.

Of course, in this small example db this problem seems very minor. However, we have a very large project with many custom tabs, each containing numerous groups and buttons. Our users are finding it very frustrating indeed that they keep losing their place on the ribbon every time they close a form.

We have investigated a workaround where we programatically store the selected tab and restore it when we think we need to. However, it is proving difficult to do this reliably. (There isn't an Office API for automating the ribbon like this, but this article helped.)

Has anyone else encountered this problem? Have you found a way to prevent the tab from changing automatically?

Edit: It seems that this problem was introduced with a fix implemented in Office 2010 SP1 . (Sorry, no link: don't think I can have more than two.) The problem is not present in the RTM version. The fix list for SP1 includes this: "Access does not activate or return the user to the correct Ribbon tab for a previously opened database object when the user returns to that object." It seems that they've tried to fix use of the Form.RibbonName property (which supports contextual ribbons), but have broken the default ribbon in the process.

like image 819
Olly Avatar asked Jun 18 '12 21:06

Olly


2 Answers

This one line fixes the issue:

<tab id="tabBogus" label="Bogus" visible="false"></tab>

Just make it your first tab in <tabs>. Big thanks to Scott's Potential Workaround answer!! (Tried to Vote it up and/or comment, but just signed up so not enough reputation.) This saved hours (or days) of work versus the other complicated workaround! Thanks!

like image 147
Jonathan Avatar answered Nov 15 '22 07:11

Jonathan


Potential Workaround

Something I stumbled across that's been working for me is to hide the first tab in the XML using the visible tag. I haven't tested it much, but I have a copy of the standard Home tab that is hidden (no idea if it needs to be a populated tab or not). It appears to me that since Access can't actually activate the hidden tab when you close a form, it remains on the currently selected one.

I don't know if this was fixed in Access 2013 or not, but hopefully the info isn't too late to be of use to someone.

like image 35
Scott Avatar answered Nov 15 '22 07:11

Scott