Как убрать стандартные команды в меню правой кнопки мыши?
А сейчас я покажу другой вариант создания меню - более разумный.
Создадим своё собственное меню, со своими командами, и которое работает только в нашей книге.
Для этого воспользуемся дополнительными событиями для книги - это Workbook_Activate() и Workbook_Deactivate().
Теперь разберём последовательность создания такого меню. Добавим в книгу новый модуль, на который разместим два макроса - NewMenu и MakroPrivet.
Sub NewMenu()
Dim Contro As Object
'Удаление Всех пунктов меню
For Each Contro In CommandBars("Cell").Controls
CommandBars("Cell").Controls(Contro.Caption).Delete
Next
'СОздаём новое меню
CommandBars("Cell").Controls.Add.Caption = "Новое меню"
With CommandBars("Cell").Controls("Новое меню")
.OnAction = "MakroPrivet"
.FaceId = 263
End With
End Sub
Sub MakroPrivet() 'Макрос, который воплняется при нажатии
MsgBox "Привет!", vbExclamation, "Привет"
End Sub
NewMenu - это макрос формирующий новое меню.
For Each... - это цикл, который перебирает все имеющиеся пункты в стандартном меню и удаляет их.
CommandBars("Cell").Controls.Add.Caption = "Новое меню" - при помощи этой команды мы создаём новый пункт меню с названием "Новое меню".
With CommandBars("Cell").Controls("Новое меню")... - Настраиваем параметры кнопки нового меню
.OnAction = "MakroPrivet" - это имя макроса, который сработает при нажатии на меню.
.FaceId = 263 - это "прибамбас" картинка, которая находится левее названия нашего меню "Новое меню".
MakroPrivet - как было указано выше, это макрос, который выполняется при нажатии на новое меню.
MsgBox "Привет!"... - сообщение, которое появляется при выполнении кода нового меню.
Теперь сделаем так, чтобы меню правой кнопки появлялось только при активации нашей книги. Т.е. если мы переключимся на другую книгу, то меню будет стандартное.
Для этого в окне VB щёлкаем слева по пункту "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Activate.
После этого появится следующие начало и конец макроса, который и будет срабатывать при активации книги.
Private Sub Workbook_Activate()
End Sub
Вставим в этот макрос ссылку на макрос NewMenu, который находится в созданном модуле.
Private Sub Workbook_Activate()
NewMenu
End Sub
теперь при активации книги будет срабатывать макрос NewMenu, который и будет формировать наше новое меню.
Но тут есть один нюанс. При отткрытии ещё одного Excel-евского документа, не закрывая нашу книгу, в открытом документе будет появляться наше меню, что не желательно. Ведь мы хотим создать меню, которое будет работать только в нашей книге, а не в какой-то другой параллельно открытой. Чтобы такого не происходило добавим в нашу книгу макрос, который будет сбрасывать меню правой кнопки в настройки по умолчанию, при переключении пользователя на другую книгу.
Для этого в окне VB щёлкаем слева по пункту "ЭтаКнига". Открывается окно. В левом верхнем окошке выбираем пункт Workbook и правом окошке Deactivate
В открывшийся код поместим всего одну строчку, которая и будет сбрасывать меню в настройки по умолчанию.
Private Sub Workbook_Deactivate()
Application.CommandBars("Cell").Reset
End Sub
Ну вот, теперь при активации нашей книги будет формироваться новое меню правой кнопки мыши. Но как только книга деактивируется, то-есть мы переключаемся на другой документ, меню сбрасывается.
Worksheet_Activate
Рассмотрим событие, которое возникает при активации листа. Делается это следующим образом. Заходим в окно VB, щёлкаем слева по необходимому листу. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке Worksheet_Activate.
После этого появится следующие начало и конец макроса, который и отвечает за активацию листа.
Private Sub Worksheet_Activate()
End Sub
Если в этот код поместить какое-нибудь информационное сообщение, то при активации листа (например перейдти на лист 2, а затем опять на лист 1), нам будет появляться это сообщение (Пример: Лист 1).
Private Sub Worksheet_Activate()
MsgBox "Вы перешли на следующий уровень!", vbInformation, "Пример"
End Sub
Worksheet_Deactivate
Рассмотрим событие, которое возникает при деактивации листа, т.е. когда мы уходим с него. Делается это следующим образом. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке Worksheet_Deactivate.
После этого появится следующие начало и конец макроса, который и отвечает за уход с листа - деактивацию.
Private Sub Worksheet_Deactivate()
End Sub
Если в этот код поместить какое-нибудь информационное сообщение, то при уходе с активного листа, нам будет появляться сообщение (Пример: Лист 2).
Private Sub Worksheet_Deactivate()
MsgBox "Вы покинули лист!", vbInformation, "Пример"
End Sub
Worksheet_Calculate
Рассмотрим событие, которое возникает при пересчёте листа. Напрмер, у нас на листе есть таблица в которой содержится куча формул. И вам необходимо отследить всяческий пересчёт таблицы. При помощи этого макроса это можно легко выполнить.
Делается это следующим образом. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке Calculate.
После этого появится следующие начало и конец макроса, который и отслеживает пересчёт листа.
Private Sub Worksheet_Calculate()
End Sub
Если в этот код поместить какое-нибудь информационное сообщение, то при пересчёте формул на листе, нам будет появляться сообщение, например такое (Пример: Лист 3):
Private Sub Worksheet_Calculate()
MsgBox "Пересчёт листа выполнен!" & vbNewLine & _
"Последние изменения внёс " & Application.UserName & "!", _
vbInformation, "Пример"
End Sub
Application.UserName - это имя компьютера.
Worksheet_FollowHyperlink
Рассмотрим событие, которое возникает при переходе по ссылке. Делается это следующим образом. Заходим в окно VB, щёлкаем слева по необходимому листу. Открывается окно. В левом верхнем окошке выбираем пункт Worksheet, а правом окошке FollowHyperlink.
После этого появится следующие начало и конец макроса, который и отвечает за переход по ссылке.
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
End Sub
Если в этот код поместить какое-нибудь информационное сообщение, то при переходе по ссылке мы его увидим (Пример: Лист 1).
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
MsgBox "Вы перешли по ссылке на мой сайт!", vbInformation, "Пример"
End Sub
< < Предыдущая глава | Следующая глава > > |