SAS888
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору TarValon А зачем перебирать в цикле все контролы контекстного меню ячейки? Для того, чтобы по клику правой кнопкой мыши создать свой пункт ("вкусность") со ссылкой на макрос, можно в модуле нужного листа использовать код: Код: Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) Dim bt As CommandBarControl On Error Resume Next: Set bt = Application.CommandBars("Cell").Controls("MyControl") If Err = 0 Then Exit Sub Set bt = Application.CommandBars("Cell").Controls.Add(before:=1) With bt .Caption = "MyControl": .OnAction = "MyControl": .FaceId = 1992 End With End Sub | В результате, при правом клике, будет создан пункт "MyControl" контекстного меню ячейки листа, содержащего этот код, со ссылкой на макрос с именем "MyControl". Причем, если такой пункт уже существует, то повторно он создан не будет. Для того, чтобы при правом клике этот пункт удалялся из контекстного меню, можно использовать код: Код: Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) On Error Resume Next 'это на случай, если такого контрола нет Application.CommandBars("Cell").Controls("MyControl").Delete End Sub | Естественно, что этот код должен находиться в модуле другого листа. Но Вы (не знаю зачем) используете событие нажатия правой кнопки мыши на любом листе книги. Это ни к чему. Если требуется изменить (добавить/удалить/восстановить) контекстное меню ячейки, то соответствующий код достаточно выполнять не при каждом правом клике, а по событиям открытия (активации) и закрытия (деактивации) книги, в которой требуется иметь дополнительные пункты меню, что более рационально. Если же требуется восстановить пункты контекстного меню ячейки рабочего листа, используемые по умолчанию, то можно воспользоваться кодом: Код: Application.CommandBars("Cell").Reset |
| Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:41 03-03-2011 | Исправлено: SAS888, 09:35 03-03-2011 |
|