MyTetra Share
Делитесь знаниями!
Программное скрытие/восстановление и сворачивание/разворачивание ленты Ribbon (Access 2010 и выше).
16.03.2019
23:43
Раздел: !Закладки - VBA - Access
Программное скрытие/восстановление и сворачивание/разворачивание ленты Ribbon (Access 2010 и выше).

(обращений: 160 с 16.06.2017)

Разделы:  Полезные функции, ЧаВо (FAQ)

 

Описание: Из названия всё ясно. Для начинающих.

Автор: Дмитрий Сонных (AKA Joss)

Добавил на сайт: Профиль пользователяJoss 16.06.2017

Начиная с версии 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.

Использованы материалы с сайта 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

[Back]


Текущий рейтинг:
0 из 5 (проголосовало:0).
Здравствуйте!
Для участия в рейтинге необходимо залогиниться на сайт.
Это сделано для того, чтобы более точно производить оценку статей (чтобы одному и тому же человеку было труднее голосовать несколько раз, портя тем самым статистику.
Эта процедура очень быстрая и, надеюсь, Вас не затруднит :).
Все мысли по поводу работы сайта всегда можно высказать на форуме!
Вход на сайт

Обсуждение статьи:   
Сворачивание ленты без использования условной компиляции Профиль пользователяJoss   
Если Вы не хотите использовать условную компиляцию, то можете воспользоваться предложением пользователя 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 не вызывает процедуру, и ошибки не будет.

Взято здесь http://www.sql.ru/forum/1262455/kompilyaciya-koda-v-zavisimosti-ot-versii-access
13.06.2017 11:14

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования