Блокировка правой кнопки мышки в Excel
Добрый день, уважаемые читатели блога! Сегодня отвечаю на вопрос одного из подписчиков - как заблокировать вызов контекстного меню (щелчок правой кнопкой мышки) на листе и книге Excel.
Самый простой и действенный способ - написать небольшой макрос. Пойдём по уже знакомому алгоритму вставки кода в элементы файла Excel. О том как найти вкладку "Разработчик" и добавлять код VBA в модули, листы и книги можно посмотреть в предыдущих статьях.
Блокируем лист
- открываем вкладку "Разработчик";
- нажимаем кнопку "Visual Basic";
- два раза щёлкаем на имя листа где хотим заблокировать щелчок правой кнопки мыши (у меня это Лист1).
Далее вставляем небольшой макрос:
Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
Вся соль заключается в имени команды - перед щелчком правой кнопки мышки программа проверяет, а можно ли вообще щёлкать? В нашем случае аргумент Cancel имеет значение True, то есть программа проверила возможность блокировки и получила положительный ответ, заблокировано.
Будьте очень внимательны, если данный код разместить в модуле рабочей книги ("Workbook") он не сработает.
Блокируем книгу
Для блокировки правой кнопки мышки на новых листах следует указать вот такой макрос:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
End Sub
Здесь изменена область - вместо листа работаем с книгой, и событие (SheetBeforeRightClick), действие и аргумент остались прежними.
Если хотим, чтобы также выводилось некое сообщение к коду можно добавить всплывающее окно с сообщением.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
Cancel = True
MsgBox ("Контекстное мею заблокировано!")
End Sub
Теперь при щелчке будет выводиться сообщение.
Счётчик нажатий правой кнопки мыши
Можно пойти дальше и показывать места где был совершён щелчок правой кнопкой мышки, вставляя в эти места надписи с номером нажатия. Код будет следующим. В нём мы избавимся от всплывающего окна и добавим счётчик.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
' Счетчик нажатий кнопки мыши
Static intCount As Integer
Dim x As Integer, y As Integer
Cancel = True
' Отображение текстового поля с количеством щелчков правой _
кнопкой мыши
x = Target.Left
y = Target.Top
intCount = intCount + 1
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, _
x, y, 35, 20).TextFrame.Characters.Text = intCount
End Sub
В код макроса добавлен счётчик щелчков правой кнопкой мыши, который определяет положение курсора (ячейки на которую он наведён) и порядковый номер (начиная с единицы) вызова контекстного меню. Результат будет следующим.
Всё просто! Теперь можно блокировать контекстное меню разными способами! Всем удачи!