Пре Екцел 2007, ВБА програмери су користили објекат ЦоммандБар за креирање прилагођених менија, прилагођених трака са алаткама и прилагођених менија са пречицама (десним кликом). Почевши од програма Екцел 2007, објекат ЦоммандБар је у прилично чудној позицији. Ако пишете код да бисте прилагодили мени или траку са алаткама, Екцел пресреће тај код и игнорише многе ваше команде.
Уместо да прикаже ваше добро осмишљено побољшање интерфејса, Екцел 2007 (као и касније верзије) једноставно избацује ваше прилагођене меније и траке са алаткама у свеобухватну картицу на траци под називом Додаци.
Прилагођавања менија и траке са алаткама завршавају у групи Додаци → Команде менија или групи Додаци → Прилагођене траке са алаткама. Али прилагођавање менија пречица (који такође користи ЦоммандБар објекат) и даље функционише као и увек - па, некако.
Суштина? Објекат ЦоммандБар више није много користан, али остаје једини начин за прилагођавање менија пречица.
Додавање нове ставке у мени пречице ћелије
Испод ћете пронаћи пример кода који додаје нову ставку у мени пречица који се појављује када кликнете десним тастером миша на ћелију. Требало би да будете у могућности да прилагодите ове примере својим потребама.
Можете мало побољшати тај услужни програм Цханге Цасе тако што ћете га учинити доступним из менија пречица ћелије.
Процедура АддТоСхортцут додаје нову ставку менија приручном менију ћелије. Можете га прилагодити тако да указује на ваше сопствене макрое тако што ћете променити својства Цаптион и ОнАцтион објекта под називом НевЦонтрол.
Суб АддТоСхортЦут()
Дим Бар као командна трака
Затамни нову контролу као дугме командне траке
ДелетеФромСхортцут
Постави траку = Апплицатион.ЦоммандБарс(„Ћелија“)
Поставите НевЦонтрол = Бар.Цонтролс.Адд _
(Тип:=мсоЦонтролБуттон, ИД:=1, _
привремено:=Тачно)
Са НевЦонтрол
.Цаптион = „&Промени случај“
.ОнАцтион = „ЦхангеЦасе“
.Стиле = мсоБуттонИцонАндЦаптион
Завршити
Енд Суб
Када измените приручни мени, та измена остаје на снази све док поново не покренете Екцел. Другим речима, измењени менији пречица се не ресетују када затворите радну свеску која садржи ВБА код. Стога, ако пишете код за измену приручног менија, скоро увек пишете код да бисте преокренули ефекат ваше измене.
Процедура ДелетеФромСхортцут уклања нову ставку менија из менија пречице ћелије:
Суб ДелетеФромСхортцут()
У случају грешке Настави даље
Апплицатион.ЦоммандБарс(“Целл”).Контроле _
(„&Промени случај“). Избриши
Енд Суб
Ово показује како се нова ставка менија приказује након што кликнете десним тастером миша на ћелију.

Приручни мени ћелије који приказује прилагођену ставку менија: Промени велика и мала слова.
Прва стварна команда након декларације неколико променљивих позива процедуру ДелетеФромСхортцут. Ова изјава осигурава да се само једна ставка менија Цханге Цасе појављује на пречицама менија Ћелије. Покушајте да коментаришете тај ред (ставите апостроф на почетак реда) и покренете процедуру неколико пута — али немојте се заносити!
Кликните десним тастером миша на ћелију и видећете више инстанци ставке менија Цханге Цасе. Ослободите се свих уноса покретањем ДелетеФромСхортцут више пута (једном за сваку додатну ставку менија).
Коначно, потребан вам је начин да додате ставку менија пречице када се радна свеска отвори и да избришете ставку менија када је радна свеска затворена. Лако је ово урадити. Само додајте ове две процедуре догађаја у модул кода ТхисВоркбоок:
Приватна под Радна свеска_Опен()
Позовите АддТоСхортЦут
Енд Суб
Приватна под радна свеска_БефореЦлосе(Откажи као Боолеан)
Позовите ДелетеФромСхортцут
Енд Суб
Процедура Воркбоок_Опен се извршава када се радна свеска отвори, а Воркбоок_БефореЦлосе процедура се извршава пре него што се радна свеска затвори. Баш оно што је доктор наредио.
Шта је другачије у Екцел 2013 и Екцел 2016?
Ако сте користили ВБА за рад са приручним менијима у програму Екцел 2007 или старијем, морате бити свесни значајне промене.
У прошлости, ако је ваш код изменио приручни мени, та измена је била на снази за све радне свеске. На пример, ако сте додали нову ставку у мени са десним кликом на ћелију, та нова ставка ће се појавити када кликнете десним тастером миша на ћелију у било којој радној свесци (плус друге радне свеске које отворите касније). Другим речима, модификације менија пречица су направљене на нивоу апликације .
Екцел 2013 и Екцел 2016 користе један интерфејс документа, а то утиче на меније пречица. Промене које уносите у меније пречица утичу само на прозор активне радне свеске. Када извршите код који мења приручни мени, мени пречица за прозоре који нису активни прозор неће бити промењен. Ово је радикално одступање од начина на који су ствари функционисале.
Још један преокрет: Ако корисник отвори радну свеску (или креира нову радну свеску) када активни прозор приказује измењени пречица мени, нова радна свеска такође приказује измењени мени пречица. Другим речима, нови прозори приказују исте приручне меније као и прозор који је био активан када су нови прозори отворени.
Закључак: У прошлости, ако сте отворили радну свеску или додатак који је изменио меније пречица, могли сте бити сигурни да ће измењени менији пречица бити доступни у свим радним свескама. Немате више то уверење.