Пятница, 09.20.2024, 3:39 AM
Приветствую Вас Гость | RSS

Электронный учебник по VBA MS Excel 2010

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

Как убрать стандартные команды в меню правой кнопки мыши?

А сейчас я покажу другой вариант создания меню - более разумный.
Создадим своё собственное меню, со своими командами, и которое работает только в нашей книге.
Для этого воспользуемся дополнительными событиями для книги - это Workbook_Activate() и Workbook_Deactivate().

Теперь разберём последовательность создания такого меню. Добавим в книгу новый модуль, на который разместим два макроса - NewMenu и MakroPrivet.

        Option Explicit

        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

< < Предыдущая глава Следующая глава > >
Поиск

Динара Илькаева © 2024
Бесплатный конструктор сайтов - uCoz