Начиная с версии 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 Просмотров: 1817
Ваш коментарий будет первым | | |