Программное добавление кнопки в контекстное меню ячейки (строки, столбца) из кода VBA Excel. Свойство CommandBars объекта Application.
Свойство Application.CommandBars
Свойство CommandBars объекта Application возвращает коллекцию командных панелей Microsoft Excel.
Примеры командных панелей, вызываемых кликом правой кнопки мыши (контекстных меню):
- CommandBars(«Cell») – контекстное меню ячейки;
- CommandBars(«Row») – контекстное меню строки;
- CommandBars(«Column») – контекстное меню столбца.
Добавление кнопки из кода VBA Excel в контекстное меню ячейки. Кнопки в контекстные меню строк и столбцов добавляются аналогично.
‘Объявляем объектную переменную cmdBarBut Dim cmdBarBut As CommandBarButton ‘Создаем временную (Temporary:=True) кнопку для контекстного ‘меню ячейки и присваиваем ссылку на нее переменной cmdBarBut Set cmdBarBut = Application.CommandBars(«Cell»).Controls.Add(Temporary:=True) With cmdBarBut ‘Присваиваем кнопке название .Caption = «Новая кнопка» ‘Задаем отображение в контекстном меню только названия кнопки .Style = msoButtonCaption ‘Назначаем кнопке процедуру (макрос) .OnAction = «MySub» End With |
Если хотите создать постоянную кнопку для контекстного меню, используйте параметр Temporary
метода Controls.Add
в значении False
, которое применяется по умолчанию:
Set cmdBarBut = Application.CommandBars(«Cell»).Controls.Add |
Созданная предыдущим кодом VBA временная кнопка контекстного меню ячейки будет утилизирована только при закрытии приложения Microsoft Excel. Это означает, что если в приложении открыты несколько книг, тогда после закрытия книги с кодом, создавшим кнопку, она продолжит существование и будет доступна из других открытых книг. Если это не желательно, можно удалить кнопку следующей строкой:
Application.CommandBars(«Cell»).Controls(«Новая кнопка»).Delete |
Эта же строка удалит и постоянную кнопку.
Примеры добавления и удаления кнопок
Пример 1
Добавление кнопки в контекстное меню ячейки из кода VBA Excel при открытии книги и удаление кнопки при закрытии книги.
Добавление кнопки (код размещается в модуле книги):
Private Sub Workbook_Activate() Dim cmdBarBut As CommandBarButton On Error Resume Next Set cmdBarBut = Application.CommandBars(«Cell»).Controls.Add(Temporary:=True) With cmdBarBut .Caption = «Новая кнопка» .Style = msoButtonCaption .OnAction = «MySub» End With On Error GoTo 0 End Sub |
Удаление кнопки (код размещается в модуле книги):
Private Sub Workbook_Deactivate() On Error Resume Next Application.CommandBars(«Cell»).Controls(«Новая кнопка»).Delete On Error GoTo 0 End Sub |
Вызываемая процедура (код размещается в стандартном модуле):
Sub MySub() MsgBox «Кнопка работает!» End Sub |
Пример 2
Добавление кнопки в контекстное меню ячейки из кода VBA Excel при открытии контекстного меню и удаление кнопки при завершении вызываемой процедуры.
Добавление кнопки (код размещается в модуле книги):
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) Dim cmdBarBut As CommandBarButton On Error Resume Next With Application ‘Удаляем ранее созданную кнопку, если она не была ‘нажата и не была удалена назначенным ей макросом .CommandBars(«Cell»).Controls(«Новая кнопка»).Delete Set cmdBarBut = .CommandBars(«Cell»).Controls.Add(Temporary:=True) End With With cmdBarBut .Caption = «Новая кнопка» .Style = msoButtonCaption .OnAction = «MySub» End With On Error GoTo 0 End Sub |
Удаление кнопки при закрытии книги, если она при вызове контекстного меню не была нажата и не была удалена назначенным ей макросом (код размещается в модуле книги):
Private Sub Workbook_Deactivate() On Error Resume Next Application.CommandBars(«Cell»).Controls(«Новая кнопка»).Delete On Error GoTo 0 End Sub |
Вызываемая процедура с кодом удаления вызвавшей ее кнопки из контекстного меню (код размещается в стандартном модуле):
Sub MySub() MsgBox «Кнопка работает!» On Error Resume Next Application.CommandBars(«Cell»).Controls(«Новая кнопка»).Delete On Error GoTo 0 End Sub |
0 / 0 / 0 Регистрация: 01.12.2011 Сообщений: 25 |
|
1 |
|
11.09.2006, 20:36. Показов 20392. Ответов 7
Здравствуйте всем. Подскажите, пожалуйста, каким образом можно добавить собственный пункт в контекстное меню Excel. Спасибо. Вопрос администратору, у меня не работает поиск по форуму при вводе образца для поиска русскими буквами (англ — ОК!). При задании «Контекстное меню» получаю следующее: Sorry the application encountered an unexpected error. Information about this error has been logged. If you continue to receive this message please contact the board administrator. Можно ли это исправить?
0 |
VladConn 5 / 5 / 3 Регистрация: 17.10.2007 Сообщений: 1,119 |
||||
12.09.2006, 02:30 |
2 |
|||
Nevsky, наверно так:
2 |
Nevsky 0 / 0 / 0 Регистрация: 01.12.2011 Сообщений: 25 |
||||
13.09.2006, 16:00 [ТС] |
3 |
|||
Спасибо большое, Влад, за пример. В коде, что я использовал, пункт меню остается постоянно, а также есть варианты по использованию в зависимости от поставленной задачи.
0 |
0 / 0 / 0 Регистрация: 24.04.2010 Сообщений: 29 |
|
10.10.2006, 22:57 |
4 |
А как потом этот пункт удалить?
0 |
Avtopic 2 / 2 / 0 Регистрация: 23.04.2011 Сообщений: 159 |
||||||||
11.10.2006, 18:18 |
5 |
|||||||
Чтобы вообще не беспокоится об удалении, если требуется в контекстное меню что-то поменять, я делаю так: В самом начале (напр. в Open) копирую все меню “cell” в новое, собственное “My_cell”.
В Workbook_SheetBeforeRightClick ставлю:
0 |
rediffusion 5 / 5 / 0 Регистрация: 13.11.2016 Сообщений: 90 |
||||||||||||
24.04.2019, 22:01 |
6 |
|||||||||||
Всем ку! Нашёл скрипт «VBA» который немного подправил под свои нужды:
Он работает отлично!
Получаю окно с такой формулировкой: P.S.
UPD: :=::=::=::=::=::=::=::=::=::=::=::=::=::=::=::
0 |
11482 / 3773 / 677 Регистрация: 13.02.2009 Сообщений: 11,145 |
|
24.04.2019, 22:48 |
7 |
0 |
5 / 5 / 0 Регистрация: 13.11.2016 Сообщений: 90 |
|
12.06.2019, 20:14 |
8 |
Alex77755, Привет! Вот решение данного вопроса. Работает сам пользуюсь доволен как слон!
0 |
АрхивОфис
Продолжаем серию обзоров о полезных плагинах для популярных приложений из комплекта Microsoft Office.
Неспешно продолжаем наши повествования о полезных расширениях для приложений из комплекта Microsoft Office. Рассматриваемый сегодня плагин «Настройка контекстного меню» предназначен для модификации контекстного меню ячейки в табличном редакторе Excel.
С помощью этого плагина можно дополнить стандартное контекстное меню любыми пунктами для работы в текущей сессии Excel, либо сохранить сделанные изменения для постоянного использования. Программа также позволяет восстановить вид контекстного меню по умолчанию.
После распаковки архива необходимо скопировать файл надстройки Rightbtn.xla в папку Microsoft Office, в которой находятся файлы надстроек Excel (например, C:Program FilesMicrosoft OfficeOfficeLibrary). Файл справки Rightbtn.hlp необходимо скопировать в папку справочных файлов Windows (как правило, это C:WindowsHelp).
Добавление плагина к Excel
Теперь необходимо подключить надстройку. Для этого после запуска Excel переходим в диалоговое окно «Надстройки», выбрав команду «Сервис -> Надстройки». В открывшемся окне отмечаем строку Rightbtn. Теперь в табличном редакторе появится новая панель «Контекстное меню» с двумя кнопками: одна вызывает диалог настройки, вторая удаляет все добавленные команды из контекстного меню.
Для добавления новых пунктов контекстного меню воспользуйтесь кнопкой «Настройка контекстного меню», расположенной на новой панели инструментов. В результате, откроется одноименное окно. В нем и следует настроить контекстное меню ячейки Excel. В новое меню можно добавить пункты трех типов (им соответствуют вкладки окна «Настройка контекстного меню»): обычные меню, инструменты и всплывающие меню.
В верхнем списке на каждой из этих вкладок выбирается группа или панель инструментов, а ниже указывается конкретный пункт меню, который необходимо добавить в контекстное меню. Для включения выделенного пункта в контекстное меню предназначена кнопка «Добавить». Пункт «Сбросить» позволяет удалить все добавленные пункты. В меню можно добавить разделительную линию, для этого предназначена кнопка «Добавить разделитель».
Настройка контекстного меню
Переключатель в нижней части окна позволяет сохранить созданное контекстное меню для следующих сеансов работы с редактором. Для этого необходимо снять установленную по умолчанию пометку с переключателя «Сохранять новые команды только для текущей сессии Excel».
После завершения настройки необходимо нажать «ОК», и в контекстном меню ячейки будут отображены все добавленные пункты.
Excel gives you access to a Context menu that is loaded with options whenever you right-click on a cell. This menu gives you the ability to perform a wide variety of tasks. It’s possible that you should add some features to the Context menu, especially if those features are ones that you use frequently. Unfortunately, you cannot change Context menus in the same way that you can edit other menus, which is by selecting Customize from the Tools menu. This is the only way to edit Context menus. The Cell menu is the most frequent form of the Context Menu that most people are familiar with and make use of.
The purpose of this article is to discuss the process of adding a button for custom code to the right-click menu in Excel using VBA code.
Add Custom Button to The Context Menu with VBA Code
Step 1
Open an excel sheet and Press Alt and F11 key (Alt+F11) to open Microsoft Visual Basic for Application windows. See the below given image.
Step 2
After that, select Insert > Module from the menu bar to bring up the popup Module window. See the below given image.
Step 3
After opening the Module Window, then type the following VBA code in it.
Sub AddItemToContextMenu() Dim cmdNew As CommandBarButton Set cmdNew = CommandBars("cell").Controls.Add With cmdNew .Caption = "My Button" .OnAction = "MyButton" .BeginGroup = True End With End Sub
After adding the VBA code, Press F5 or click on Run tab. Then Press the Alt + Q keys to exit the Microsoft Visual Basic for Applications window.
The only thing you need to do is update is .Caption property to any menu text you want to use, and Adjust the .OnAction property so that it points to the desired command or macro to be executed.
You can use the following macro if at a later time you decide that you no longer desire the menu option.
Sub RemoveContextMenuItem() On Error Resume Next CommandBars("cell").Controls("My Button").Delete End Sub
To make advantage of this, replace the text that says «My Button» with the text that you used in .Caption property of the macro written above. In this particular macro, the On Error statement is present simply in case the designated macro item had not been included in the earlier additions.
Now select any cell and right click there You will see “My Button” button added to the list.
Все настолько привыкли пользоваться мышью, что вызов контекстного меню через правую клавишу мыши кажется естественным и единственно возможным способом. Это действительно удобно, но иногда в excel возникает потребность вызова контекстного меню без мыши.
Такая потребность специфична, но бываю случаи, когда это может стать настоящим спасением. Например, если правая клавиша не работает или масштаб не позволяет точно выбрать нужную ячейку мышью и другие ситуации.
Чтобы вызвать контекстное меню, просто удерживая клавишу Shift нажмите F10.
Дополняем контекстное меню Excel
Неспешно продолжаем наши повествования о полезных расширениях для приложений из комплекта Microsoft Office. Рассматриваемый сегодня плагин «Настройка контекстного меню» предназначен для модификации контекстного меню ячейки в табличном редакторе Excel.
С помощью этого плагина можно дополнить стандартное контекстное меню любыми пунктами для работы в текущей сессии Excel, либо сохранить сделанные изменения для постоянного использования. Программа также позволяет восстановить вид контекстного меню по умолчанию.
После распаковки архива необходимо скопировать файл надстройки Rightbtn.xla в папку Microsoft Office, в которой находятся файлы надстроек Excel (например, C:Program FilesMicrosoft OfficeOfficeLibrary). Файл справки Rightbtn.hlp необходимо скопировать в папку справочных файлов Windows (как правило, это C:WindowsHelp).
Добавление плагина к Excel
Теперь необходимо подключить надстройку. Для этого после запуска Excel переходим в диалоговое окно «Надстройки», выбрав команду «Сервис -> Надстройки». В открывшемся окне отмечаем строку Rightbtn. Теперь в табличном редакторе появится новая панель «Контекстное меню» с двумя кнопками: одна вызывает диалог настройки, вторая удаляет все добавленные команды из контекстного меню.
Для добавления новых пунктов контекстного меню воспользуйтесь кнопкой «Настройка контекстного меню», расположенной на новой панели инструментов. В результате, откроется одноименное окно. В нем и следует настроить контекстное меню ячейки Excel. В новое меню можно добавить пункты трех типов (им соответствуют вкладки окна «Настройка контекстного меню»): обычные меню, инструменты и всплывающие меню.
В верхнем списке на каждой из этих вкладок выбирается группа или панель инструментов, а ниже указывается конкретный пункт меню, который необходимо добавить в контекстное меню. Для включения выделенного пункта в контекстное меню предназначена кнопка «Добавить». Пункт «Сбросить» позволяет удалить все добавленные пункты. В меню можно добавить разделительную линию, для этого предназначена кнопка «Добавить разделитель».
Настройка контекстного меню
Переключатель в нижней части окна позволяет сохранить созданное контекстное меню для следующих сеансов работы с редактором. Для этого необходимо снять установленную по умолчанию пометку с переключателя «Сохранять новые команды только для текущей сессии Excel».
После завершения настройки необходимо нажать «ОК», и в контекстном меню ячейки будут отображены все добавленные пункты.
Контекстное меню
Кроме основного меню, в Excel широко используются так называемые контекстные меню (Рисунок 6). Контекстные меню связаны с различными объектами в окне приложения и в окне документа. Контекстное меню объекта вызывается щелчком правой клавиши мыши по этому объекту. Выполнение команды контекстного меню производится так же, как и команды меню приложения, т.е. щелчком левой клавиши мыши.
Рисунок 6 Контекстное меню
В контекстное меню входят команды, которые наиболее часто используются для редактирования объекта, по которому выполнен щелчок. Соответственно, набор команд такого меню зависит от того, по какому объекту выполнен щелчок. Например, после щелчка правой клавишей мыши по ячейке таблицы появляется контекстное меню с командами Вырезать, Копировать, Вставить, Специальная вставка. Добавить ячейки.
Настройка меню и панели инструментов
Любая из встроенных панелей инструментов Excel может быть выведена на экран. Вы можете настроить эти панели так, чтобы они включали наиболее часто используемые кнопки. Для этого выполнив команду Вид / Панели инструментов (Рисунок 7).
Рисунок 7 Добавление панелей инструментов
После выбора в нем пункта Настройка вызывается соответствующее окно диалога (Рисунок 8).
Рисунок 8 Настройка панелей инструментов
Используя возможности, предоставленные в этом окне, можно удалить и разместить любую из кнопок на нужную панель инструментов. Можно создать свои собственные панели инструментов. Для этого достаточно в окне диалога Настройка нажать кнопку Создать и в поле ввода Имя панели инструментов ввести новое имя панели. Панели инструментов могут быть размещены в любой рабочей книге. Excel сохраняет все сделанные изменения панелей инструментов. Для встроенной кнопки или панели инструментов всегда можно восстановить исходное состояние.