Программное скрытие/восстановление и сворачивание/разворачивание ленты Ribbon (Access 2010 и выше)
Автор Joss   
01.11.2019 г.

Начиная с версии 2007 в Офисе вместо старого меню появилась так называемая "Лента" (Ribbon). Следовательно появились и новые команды для управления этими "Лентами".

 


Программно скрыть/восстановить ленту.

Бывает необходимо, чтобы запретить пользователям "лишние" действия.

Скрывается Ribbon командой

   DoCmd.ShowToolbar "Ribbon", acToolbarNo

а восстанавливается

   DoCmd.ShowToolbar "Ribbon", acToolbarYes

Команды можно оформить подпрограммами или функциями. 

 

Sub HideRibbon()

DoCmd.ShowToolbar "Ribbon", acToolbarNo

End Sub

 

Sub ShowRibbon()

DoCmd.ShowToolbar "Ribbon", acToolbarYes

End Sub

Эти команды работают так же в Access (и Офисе) 2007.

 

Свернуть/развернуть ленту.

Делается для того, чтобы освободить больше места под полезную информацию. В отличии от первого случая, пользователь всегда может свернуть/развернуть ленту, нажав на стрелочку, находящуюся рядом со знаком вопроса в правой части строки меню.

Команда для смены состояния ленты всего одна

   CommandBars.ExecuteMso "MinimizeRibbon"

и работает она как триггер, поочерёдно разворачивая и сворачивая ленту. Так, что если Вам надо свернуть ленту, то сначала надо проверить её состояние. Проверить состояние ленты можно запрашивая её размер. Вот так

 

   If CommandBars("Ribbon").Height > 100 Then

      CommandBars.ExecuteMso "MinimizeRibbon"

      DoEvents

   End If

Эта команда работает только в Access начиная с версии 2010. В 2007 аксе выдает ошибку Runtime eroor #5. Поэтому я и включил упоминания об этой версии в заголовок статьи.

Свернуть/развернуть ленту можно нажав на клавиатуре комбинацию клавиш Ctrl + F1 или программно эмулировав нажатие командой

   SendKeys ("^{F1}") ' Ctrl + F1

Но при этом может меняться состояние NumLock, что не хорошо.

 

Примечание.

Команда CommandBars.ExecuteMso работает только начиная с версии 2010. Но многие до сих пор пользуются версией 2003, где эта команда не обрабатывается и выдаётся сообщение об ошибке. Обойти это можно использовав операторы условной компиляции. В версии 2010 и выше используется VBA7. Так что я доработал код следующим образом

Function DbRibbonMinimize()

#If vba7 Then

    If Not RibbonState() Then

        Application.Echo False

        CommandBars.ExecuteMso "MinimizeRibbon"

        Application.Echo True

    End If

#End If

End Function

 

Function RibbonState() As Boolean

'Result: 0=normal, -1=autohide

    RibbonState = (CommandBars("Ribbon").Controls(1).Height < 100)

End Function

Такая программа прекрасно компилируется как в Access 2003, так и в Access 2010.

 

Если Вы не хотите использовать условную компиляцию, то можете воспользоваться предложением пользователя Akina с сайта SQL.RU

 

Переместите код минимизации в процедуру. Вместо условной компиляции примените обращение к этой процедуре по условию.

Function DbRibbonMinimize() As Boolean

If Val(SysCmd(acSysCmdAccessVer)) > 12 Then Call PerformMinimize

End Function

 

Private Function PerformMinimize()

If Not RibbonState() Then

    Application.Echo False

    CommandBars.ExecuteMso "MinimizeRibbon"

    Application.Echo True

End If

End Function

Компиляция процедуры, конечно, выполняется, но вот проверка существования метода CommandBars.ExecuteMso выполняется только в момент обращения к процедуре. Соответственно если версия Access не знает про этот метод, то условие в DbRibbonMinimize не вызывает процедуру, и ошибки не будет.

 

Использованы материалы с сайта SQL.RU

http://www.sql.ru/forum/1249824/kak-programmno-svernut-razvernut-lentu-access-2007-i-vyshe

http://www.sql.ru/forum/862643/programmno-skryt-lentu-menu-ribbon

а так же

http://www.accessribbon.de/en/index.php?FAQ:19

http://www.sql.ru/forum/1262455/kompilyaciya-koda-v-zavisimosti-ot-versii-access


Просмотров: 35

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code