Добавление пункта в контекстное меню excel

Программное добавление кнопки в контекстное меню ячейки (строки, столбца) из кода 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, наверно так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub AddPopUpSubMenu()
  Dim objCmdBrBtn As CommandBarButton
  
  Set objCmdBrBtn = CommandBars("Cell").Controls.Add(msoControlButton, , , , True)
  
  With objCmdBrBtn
    .Caption = "Мой Личный Новенький Пункт! "
    .DescriptionText = "Да, да - мой личный"
    .Enabled = True
    .OnAction = "MyNewPopUpSubMenu"
    .TooltipText = "Мой тул тип для моего пункта"
    .Visible = True
    .FaceId = 2
  End With
End Sub
Sub MyNewPopUpSubMenu()
  MsgBox "Вуа Ля!"
End Sub



2



Nevsky

0 / 0 / 0

Регистрация: 01.12.2011

Сообщений: 25

13.09.2006, 16:00

 [ТС]

3

Спасибо большое, Влад, за пример.

В коде, что я использовал, пункт меню остается постоянно, а также есть варианты по использованию в зависимости от поставленной задачи.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
        Cancel As Boolean)
    Dim icbc As Object
    For Each icbc In Application.CommandBars("cell").Controls
        If icbc.Tag = "brccm" Then icbc.Delete
    Next icbc
 
    If Not Application.Intersect(Target, Range("b1:b10")) _
         Is Nothing Then
                    With Application.CommandBars("cell").Controls _
                .Add(Type:=msoControlButton, before:=1, _
                temporary:=False)
           .Caption = "Подпись"
           .OnAction = "Макрос"
           .Tag = "brccm"
        End With
   End If
End Sub



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”.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Sub New_Commandbar() 
Dim Cbr As CommandBar, Ctr As CommandBarControl 
On Error Resume Next 
Application.CommandBars("My_cell").Delete 
Application.CommandBars.Add Name:="My_cell", Position:=msoBarPopup, Temporary:=True 
For Each Ctr In Application.CommandBars("cell").Controls 
    With Application.CommandBars("My_cell").Controls.Add(Ctr.Type, Ctr.ID, Ctr.Parameter, , 1) 
        .Caption = Ctr.Caption 
'       .OnAction = Ctr.OnAction 
        .BeginGroup = Ctr.BeginGroup
‘ Копировать также используя CopyButton или CopyControl не помню как называется метод.
    End With 
Next 
End Sub

В Workbook_SheetBeforeRightClick ставлю:

Visual Basic
1
2
3
4
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
  Cancel = True
  New_Commandbar
  Application.CommandBars("My_cell").Show



0



rediffusion

5 / 5 / 0

Регистрация: 13.11.2016

Сообщений: 90

24.04.2019, 22:01

6

Всем ку!

Нашёл скрипт «VBA» который немного подправил под свои нужды:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Спец_Примечание()
Dim myComm As Comment
  If Not ActiveCell.Comment Is Nothing Then
    If MsgBox("Ячейка уже содержит примечание, удалить?", 4) - 7 Then
      ActiveCell.Comment.Delete
    Else: Exit Sub
    End If
  End If
 
  Set myComm = ActiveCell.AddComment
  With myComm.Shape 'выставляем требуемый формат
    .Height = 110
    .Width = 200
    .AutoShapeType = 1             'форма
    .Fill.ForeColor.SchemeColor = 13 'заливка
    .Line.ForeColor.RGB = RGB(255, 0, 0) 'цвет линии
    .DrawingObject.Font.Name = "Consolas" 'шрифт
    .DrawingObject.Font.FontStyle = "обычный"
    .DrawingObject.Font.Size = 9    'размер шрифта
  End With
  'эмулируем выбор пункта "Изменить примечание"
  SendKeys "%": SendKeys "а": SendKeys "и": SendKeys "и": SendKeys "~": SendKeys "{BS}": SendKeys "{BS}"
End Sub

Он работает отлично!
Но я захотел добавить пункт в «Контекстное Меню». Файл «PERSONAL.XLSB» в папке XLSTART создан скрипты сохраняются и работают во всех «Excel» документах. Но ничего не добавляется в «Контекстное Меню». Для этого дела использовал такой скрипт:

Visual Basic
1
2
3
4
5
6
7
Sub SHD_CommAdd()
Dim MyPoint As CommandBarControl
  Set MyPoint = Application.CommandBars("Cell").Controls.Add
  MyPoint.Caption = "Спец примечание"
  MyPoint.OnAction = "PERSONAL.XLSB!AddComm"
  MyPoint.Move , 10
End Sub

Получаю окно с такой формулировкой:
Не удается выполнить макрос «PERSONAL.XLSB’AddComm». Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены.
Вообщем погуглил и нашёл такое «Для добавления макроса в контекстное меню нужно сохранять в ЭТА КНИГА».
Есть какое лекарство? Мне не удобно если только в одном документе будет добавлен пункт, удобно когда во всех документах.

P.S.
Для отмены есть такой скрипт (кстати он робит):

Visual Basic
1
2
3
Sub KMRangeClear()
  Application.CommandBars("Cell").Reset
End Sub

UPD:

:=::=::=::=::=::=::=::=::=::=::=::=::=::=::=::
1. Если создали примечание то функция для возврата «CTRL+Z» не робит (с обычным примечанием робит). Как вернуть работоспособность?
2. Если в контекстное меню добавили несколько пунктов (вызываемых через ПКМ). Как удалить выборочно (ещё раз повторю что эта штука не работает во всех доках, только в одном)? Например:
Спец примечание_1
Спец примечание_2
Спец примечание_3
Хочу удалить только «Спец примечание_1» как реализовать в макросе?
:=::=::=::=::=::=::=::=::=::=::=::=::=::=::=::



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 сохраняет все сделанные изменения панелей инструментов. Для встроенной кнопки или панели инструментов всегда можно восстановить исходное состояние.

Понравилась статья? Поделить с друзьями:
  • Добавление примечаний к ячейкам в excel
  • Добавление пользовательских функций excel
  • Добавление пользователей в excel
  • Добавление полей в документ word
  • Добавление подписи к рисунку word