Создание контекстного меню в Excel

Программирование на Visual Basic for Applications
Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Создание контекстного меню в Excel

Сообщение Vitaly1 » 20.06.2003 (Пт) 11:57

Вот вам друзья:

Создание контекстного меню в Excel
Автор статейки Тихвинский В.И.

1)Необходимо сделать функцию для создания контекстного меню:

Код: Выделить всё
Function СоздатьКонтекстноеМеню(ParamArray ПунктыМеню())
Dim mButton As CommandBarButton, r As CommandBarButton
Dim m, N As Long, i As Long
Dim s As String, ИмяСобытия
N = 0
For Each m In ПунктыМеню
N = N + 1
S=m
If instr(s,”;”) <> 0 then
Подпись=””
ИмяСобытия =””
Flag= true
For i = 1 To Len(s)
If flag = true then
If Mid(s, i, 1) <>";" Then
ИмяСобытия = ИмяСобытия + Mid(s, i, 1)
Else
Flag=false
End If
Else
Подпись= Подпись+ Mid(s, i, 1)
End if
Next i
Else
ИмяСобытия =””
For i:=1 to len(s)
If mid(s,i,1)<>”&” then
ИмяСобытия = ИмяСобытия + mid(s,i,1)
End if
Next i
Подпись=S
End if

If N = 1 Then
Set MBar = Application.CommandBars.Add(, msoBarPopup)
End If
With MBar
Set mButton = .Controls.Add(Type:=msoControlButton)
  With mButton
     .Style = msoButtonCaption
     .Caption = Подпись
     .OnAction = ИмяСобытия
  End With
End With
Next m
If N > 0 Then
MBar.ShowPopup
СоздатьКонтекстноеМеню = True
'Application.CommandBars(MBar.Name).Delete
End If
End Function

2)В модуле подпрограмм проекта необходимо создать подпрограммы имя которых соответствует именам событий меню.

3)Из события листа запускаем функцию:
Код: Выделить всё
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
Cancel = СоздатьКонтекстноеМеню("Первый", “ВторойПункт;Второй пункт”)
End Sub

Примечание:
1) События вводятся в строковом формате как аргументы функции, через запятую.
2)Имя события не должно содержать пробелов.
3)Если нужно записать и имя события пункта меню, и подпись пункта меню их разделяют точкой с запятой.
4)Если необходимо подчеркнуть букву подписи, перед ней ставят символ &
4) Через свойства объекта Target: Row и Column, можно ограничить вывод не стандартного контекстного меню в конкретных строках и столбцах листа Excel.
5)Для продолжения пункта контекстного меню(вызываемого из пункта контекстного меню), функция СоздатьКонтекстноеМеню вызывается как процедура в соответствующей процедуре пункта.
Последний раз редактировалось Vitaly1 23.06.2003 (Пн) 14:06, всего редактировалось 1 раз.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 23.06.2003 (Пн) 11:29

Похвалил бы, хоть кто нибудь, кто воспользовался. :)



п.с.
От чистолюбия еще никто не умирал!

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 23.06.2003 (Пн) 13:04

статейка похвальная и суперская, но всеж небольшое замечание:
код лучше выделять тегами типа code читабельность гораздо повысится :)
зы чИстолюбие действительно похвальная черта человека :wink:
Ничто так не ограничивает полёт мысли программиста, как компилятор


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

    TopList