До Excel 2007 програмісти VBA використовували об’єкт CommandBar для створення користувацьких меню, настроюваних панелей інструментів і спеціальних меню швидкого доступу (клацання правою кнопкою миші). Починаючи з Excel 2007, об’єкт CommandBar знаходиться в досить дивному положенні. Якщо ви пишете код для налаштування меню або панелі інструментів, Excel перехопить цей код і ігнорує багато ваших команд.
Замість того, щоб відображати ваше добре продумане покращення інтерфейсу, Excel 2007 (як і пізніші версії) просто скидає ваші налаштовані меню та панелі інструментів на універсальну вкладку стрічки під назвою Надбудови.
Налаштування меню та панелі інструментів закінчуються в групі Надбудови → Команди меню або в групі Надбудови → Настроювані панелі інструментів. Але налаштування контекстних меню (яке також використовує об’єкт CommandBar) все ще працює, як завжди — ну, начебто.
Нижня лінія? Об’єкт CommandBar більше не дуже корисний, але він залишається єдиним способом налаштування контекстних меню.
Додавання нового пункту до контекстного меню клітинки
Нижче ви знайдете зразок коду, який додає новий елемент до контекстного меню, яке з’являється, коли ви клацнете правою кнопкою миші клітинку. Ви повинні мати можливість адаптувати ці приклади до своїх потреб.
Ви можете трохи розширити цю утиліту «Змінити регістр», зробивши її доступною з контекстного меню клітинки.
Процедура AddToShortcut додає новий пункт меню до контекстного меню клітинки. Ви можете адаптувати його так, щоб він вказував на ваші власні макроси, змінивши властивості Caption і OnAction об’єкта з ім’ям NewControl.
Sub AddToShortCut()
Панель затемнення як панель команд
Заглушити NewControl як кнопку CommandBar
DeleteFromShortcut
Встановити рядок = Application.CommandBars(“Cell”)
Встановіть NewControl = Bar.Controls.Add _
(Тип:=msoControlButton, ID:=1, _
тимчасово:=правда)
З NewControl
.Caption = «&Змінити регістр»
.OnAction = "ChangeCase"
.Style = msoButtonIconAndCaption
Закінчити з
Кінець суб
Коли ви змінюєте контекстне меню, ця зміна залишається в силі, доки ви не перезавантажите Excel. Іншими словами, змінені контекстні меню не скидаються, коли ви закриваєте книгу, яка містить код VBA. Тому, якщо ви пишете код, щоб змінити контекстне меню, ви майже завжди пишете код, щоб скасувати дію ваших змін.
Процедура DeleteFromShortcut видаляє новий пункт меню з контекстного меню клітинки:
Sub DeleteFromShortcut()
Помилка Продовжити далі
Application.CommandBars(“Cell”). Елементи керування _
(«&Змінити регістр»). Видалити
Кінець суб
Це показує, як новий пункт меню відображається після клацання правою кнопкою миші клітинки.
Меню швидкого доступу клітинки, що показує спеціальний пункт меню: Змінити регістр.
Перша фактична команда після оголошення кількох змінних викликає процедуру DeleteFromShortcut. Ця заява гарантує, що в контекстному меню клітинки з’явиться лише один пункт меню «Змінити регістр». Спробуйте прокоментувати цей рядок (поставте апостроф на початку рядка) і запустіть процедуру кілька разів — але не захоплюйтеся!
Клацніть правою кнопкою миші клітинку, і ви побачите кілька екземплярів пункту меню «Змінити регістр». Позбавтеся від усіх записів, запустивши DeleteFromShortcut кілька разів (один раз для кожного додаткового пункту меню).
Нарешті, вам потрібен спосіб додати пункт контекстного меню, коли книга відкрита, і видалити пункт меню, коли книга закрита. Зробити це легко. Просто додайте ці дві процедури подій до модуля коду ThisWorkbook:
Приватна додаткова робоча книга_Open()
Викликати AddToShortCut
Кінець суб
Приватна підпорядкована робоча книга_BeforeClose(Скасувати як логічне значення)
Викликати DeleteFromShortcut
Кінець суб
Процедура Workbook_Open виконується під час відкриття книги, а процедура Workbook_BeforeClose виконується перед закриттям книги. Саме те, що лікар призначив.
Чим відрізняються Excel 2013 і Excel 2016?
Якщо ви використовували VBA для роботи з контекстними меню в Excel 2007 або попередніх версіях, вам потрібно знати про значні зміни.
У минулому, якщо ваш код змінював контекстне меню, ця зміна діяла для всіх робочих книг. Наприклад, якщо ви додали новий елемент до меню клацання правою кнопкою миші клітинки, цей новий елемент з’явиться, коли ви клацнете правою кнопкою миші клітинку в будь-якій книзі (а також інші книги, які ви відкриєте пізніше). Іншими словами, зміни в контекстному меню були внесені на рівні програми .
Excel 2013 і Excel 2016 використовують єдиний інтерфейс документа, і це впливає на контекстні меню. Зміни, внесені в контекстні меню, впливають лише на активне вікно книги. Коли ви виконуєте код, який змінює контекстне меню, контекстне меню для вікон, відмінних від активного вікна, не буде змінено. Це радикальний відхід від того, як раніше працювали.
Інший поворот: якщо користувач відкриває книгу (або створює нову книгу), коли в активному вікні відображається змінене контекстне меню, нова книга також відображає змінене контекстне меню. Іншими словами, нові вікна відображають ті самі контекстні меню, що й вікно, яке було активним під час відкриття нових вікон.
Підсумок: у минулому, якщо ви відкривали книгу або надбудову, яка змінювала контекстні меню, ви могли бути впевнені, що змінені контекстні меню будуть доступні в усіх робочих книгах. Ви більше не маєте такої впевненості.
Створюйте спеціальні контекстні меню в Access 2007
Вікно дизайну макросу в Access 2007 відрізняється від пізніших версій, тому розгорніть наступні розділи, щоб слідувати, якщо ви використовуєте Access 2007.
Крок 1 для Access 2007: Створіть групу макросів, яка містить команди меню
На цьому кроці ви створюєте групу макросів, кожен макрос якої буде окремою командою у вашому контекстному меню.
Що таке макрогрупа?
Група макросів — це один макрооб’єкт, який містить два або більше незалежних макросів. Окремі макроси ідентифікуються шляхом введення імені для кожного макросу в стовпці «Назви макросів». На наведеній нижче ілюстрації Macro3 є групою макросів. NotFoundMsg і FoundMsg — окремі макроси в групі, кожен макрос складається з двох дій макросу.
Примітка. Стовпець назви макросу за замовчуванням приховано. Щоб відобразити стовпець «Назва макросу» , на вкладці «Дизайн» у групі «Показати/сховати» клацніть «Назви макросу» .
-
На вкладці «Створити» в групі «Інше» натисніть «Макрос» . Якщо ця команда недоступна, клацніть стрілку під кнопкою «Модуль» або «Модуль класу» , а потім клацніть «Макрос» .
-
На вкладці «Дизайн» у групі «Показати/сховати » клацніть «Назви макросів» , щоб відобразити стовпець « Ім’я макросу» .
-
Для кожної команди, яку ви хочете мати у своєму спеціальному контекстному меню:
-
У стовпці «Назва макросу» введіть текст, який потрібно відобразити в контекстному меню (наприклад, «Друкувати звіт» або «Зберегти»).
Примітка. Щоб створити клавішу доступу, щоб ви могли вибрати команду за допомогою клавіатури, введіть амперсанд (&) перед літерою, яку потрібно зробити клавішею доступу в назві команди (наприклад, «&Зберегти»). Ця літера буде підкреслена в меню.
-
У стовпці «Дія» виберіть першу дію, яку ви бажаєте виконати, коли ви клацаєте команду в контекстному меню.
-
Якщо під час вибору цієї команди ви хочете виконати інші дії, додайте їх у наступних рядках. Для кожної наступної дії залишайте клітинку імені макросу порожньою.
Примітка. Щоб створити рядок між двома командами меню, введіть дефіс (-) у стовпці Ім’я макросу між відповідними командами меню.
-
Збережіть і назвіть макрос, наприклад, mcrShortcutMenuCommands .
На наступній ілюстрації показано приклад групи макросів для користувацького меню або контекстного меню.
Крок 2 для Access 2007: Створіть макрос, який створює меню
Цей крок може здатися зайвим, але щоб створити контекстне меню з групи макросів, створеної на кроці 1, потрібно створити другий макрос, який містить дію макросу AddMenu . Цей макрос іноді називають «макрос меню».
-
На вкладці «Створити» в групі «Інше» натисніть «Макрос» . Якщо ця команда недоступна, клацніть стрілку під кнопкою «Модуль» або «Модуль класу» , а потім клацніть «Макрос» .
-
У першому рядку макросу виберіть AddMenu у списку Action .
-
У розділі «Аргументи дії» в полі «Назва меню» введіть назву меню (наприклад, «Команди звіту»). Цей аргумент не обов’язковий, але рекомендований, якщо на кроці 3 ви плануєте додати меню на вкладку стрічки (наприклад, вкладку « Надбудови» у формі чи звіті). Якщо меню додається як контекстне меню на кроці 3, аргумент «Назва меню» ігнорується.
-
У полі «Назва макросу меню» введіть назву макросу, створеного на кроці 1.
-
Збережіть і назвіть макрос, наприклад, mcrAddShortcutMenu .
На наступній ілюстрації показано приклад макросу меню, який створює меню, розроблене на кроці 1.
Крок 3 для Access 2007: приєднайте меню до елемента керування, форми, звіту або бази даних
Залежно від того, де ви бажаєте розмістити меню, скористайтеся однією або кількома з наведених нижче процедур.
-
Додайте меню на вкладку «Надбудови» форми або звіту
Використовуйте цю процедуру, якщо потрібно, щоб меню відображалося на вкладці «Надбудови» для певної форми або звіту, як показано на наступній ілюстрації:
-
В області переходів клацніть правою кнопкою миші форму або звіт, де має відобразитися меню, а потім клацніть « Перегляд конструктора» .
-
На вкладці «Дизайн» у групі «Показати/сховати» натисніть «Аркуш властивостей» .
-
Виберіть увесь об’єкт, вибравши «Форма» або «Звіт» зі списку у верхній частині панелі завдань «Аркуш властивостей».
-
На вкладці «Інше» на аркуші властивостей у полі властивостей контекстного меню введіть назву макросу, створеного на кроці 2 (у цьому прикладі «mcrAddShortcutMenu»).
Під час наступного відкриття форми або звіту на стрічці з’явиться вкладка « Надбудови» . Натисніть вкладку, щоб побачити меню.
Щоб отримати додаткові відомості про методи налаштування стрічки, як-от додавання спеціальних вкладок або приховування вкладок за замовчуванням, див. статтю Створення спеціальної стрічки в Access .
Стрічка є компонентом інтерфейсу користувача Microsoft Office Fluent.
-
Додайте меню як контекстне меню для форми, звіту або елемента керування
Використовуйте цю процедуру, якщо ви хочете, щоб меню з’являлося, коли ви клацаєте правою кнопкою миші певну форму, звіт або елемент керування, як показано на наступній ілюстрації:
-
В області навігації клацніть правою кнопкою миші форму або звіт, де потрібно розмістити контекстне меню, а потім клацніть « Перегляд конструктора» .
-
На вкладці «Дизайн» у групі «Показати/сховати» натисніть «Аркуш властивостей» .
-
Виберіть елемент керування або об’єкт, до якого потрібно приєднати контекстне меню.
Примітка. Щоб вибрати весь об’єкт, виберіть «Форма» або «Звіт» зі списку вгорі панелі завдань «Аркуш властивостей».
-
На вкладці «Інше» на аркуші властивостей у полі властивостей рядка контекстного меню введіть назву макросу, який ви створили на кроці 2 (у цьому прикладі «mcrAddShortcutMenu»).
-
Додайте меню як глобальне контекстне меню
Ця процедура замінює всі типові контекстні меню в поточній базі даних. Це не впливає на спеціальні контекстні меню, які ви прикріпили до певних форм, звітів або елементів керування.
-
Натисніть кнопку Microsoft Office , а потім виберіть Параметри доступу .
-
У діалоговому вікні «Параметри Access» клацніть «Поточна база даних» .
-
У розділі «Параметри стрічки та панелі інструментів» у полі рядка контекстного меню введіть назву макросу, який ви створили на кроці 2 (у цьому прикладі «mcrAddShortcutMenu»).
-
Настроювані контекстні меню замінюють стандартні контекстні меню для об’єктів, до яких вони приєднані. Якщо ви хочете зберегти певні команди Access для використання в цих меню, скористайтеся дією RunCommand , щоб розмістити команди в групах макросів для меню, у яких вони потрібні.
-
Настроюване контекстне меню, приєднане до елемента керування, замінює будь-які інші настроювані контекстні меню, визначені в базі даних. Настроюване контекстне меню, додане до форми або звіту, замінює настроюване глобальне контекстне меню.
-
Коли ви вказуєте макрос меню для форми, звіту чи бази даних, Access запускає цей макрос меню щоразу, коли відкривається форма, звіт або база даних. Якщо ви вносите зміни в макрос меню або групу макросів, яка визначає його команди, коли форма, звіт або база даних відкриті, ви повинні закрити форму, звіт або базу даних і знову відкрити їх, щоб побачити зміни.
-
Щоб створити підменю, виконайте крок 1, щоб створити окрему групу макросів, яка містить лише команди підменю. Потім знову виконайте крок 1, щоб визначити команди для меню вищого рівня. Додайте підменю як елемент у групі макросів вищого рівня за допомогою дії макросу AddMenu . На наступній ілюстрації показано групу макросів для меню, яке містить підменю, а потім показано отримане контекстне меню. Третій рядок у групі макросів створює підменю «Експортувати до...» ( mcrSubMenu ).
Ви можете створити кілька рівнів підменю, використовуючи дії AddMenu в групах макросів для кожного рівня меню. Обов’язково вказуйте значення для аргументу «Назва меню» для кожної дії AddMenu , інакше підменю відображатиметься як порожній рядок у меню вищого рівня.
-
Умови макросу підтримуються лише в макросі меню верхнього рівня. Іншими словами, ви можете використовувати умову в макросі меню, щоб визначити, чи буде відображатися конкретне меню або меню швидкого доступу, але лише для меню верхнього рівня. Ви не можете використовувати умови для відображення або приховування команд або підменю в меню. Ви також можете використовувати умову, щоб приховати або показати спеціальне контекстне меню або глобальне контекстне меню.
-
За бажанням макрос меню, який ви створюєте на кроці 2, може бути частиною групи макросів. Наприклад, якщо у вас є кілька контекстних меню для різних об’єктів або елементів керування, ви можете створити один об’єкт макросу, який містить усі необхідні макроси меню. Переконайтеся, що відображається стовпець «Назва макросу» та введіть унікальне ім’я для кожного макросу. На кроці 3 використовуйте таке позначення для посилання на макрос: macrogroupname.macroname . Наприклад, mcrAddShortcutMenus.AddMenu2 .