Событие BeforeRightClick в Excel активируется при щелчке правой кнопкой мыши на рабочем листе, вызывая появление контекстного меню. Если требуется отключить это меню на определенном листе, можно воспользоваться перехватом события BeforeRightClick. Ниже представлен пример процедуры, которая устанавливает значение аргумента Cancel в True, отменяя обработку события и выводя соответствующее сообщение на экран.
Важно отметить, что данное действие не полностью блокирует доступ к контекстному меню, так как пользователь все равно может воспользоваться комбинацией клавиш <Shift+F10>, о чем не все мои читатели могут быть осведомлены.
На скриншоте ниже приведен пример, демонстрирующий использование события BeforeRightClick для обработки числовых значений в ячейке. Если обнаружено числовое значение, то вызывается диалоговое окно Формат ячеек на вкладке Число (предпоследний скриншот), и аргумент Cancel устанавливается в True, чтобы избежать отображения стандартного контекстного меню. В случае отсутствия числового значения ничего не происходит (последний скриншот).
Обратите внимание, что в коде проводится дополнительная проверка, чтобы удостовериться в "НЕПУСТОТЕ" ячейки, так как VBA рассматривает пустые ячейки как содержащие числовые значения.
Разберем код:
- Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean): Эта строка объявляет начало процедуры, которая будет выполняться при событии "BeforeRightClick" на рабочем листе. Процедура принимает два аргумента: Target (ячейка, на которой произведен щелчок) и Cancel (булева переменная, которая может быть установлена в True для отмены события).
- If IsNumeric(Target) And Not IsEmpty(Target) Then: Это условие проверяет, является ли содержимое ячейки, на которой произведен щелчок, числовым (IsNumeric) и не пустым (Not IsEmpty).
- Application.CommandBars.ExecuteMso ("NumberFormatsDialog"): Если условие из предыдущей строки истинно (т.е., ячейка содержит числовое значение и не пуста), то выполняется данная строка, которая вызывает диалоговое окно "Формат ячеек" на вкладке "Число". Это окно позволяет пользователю выбрать формат для числового значения в ячейке.
- Cancel = True: После открытия диалогового окна и выполнения необходимых действий, эта строка устанавливает переменную Cancel в True. Это приводит к отмене события "BeforeRightClick", и стандартное контекстное меню не отображается.
- End If: Это ключевое слово завершает блок условия, начатый с If.
- End Sub: Это ключевое слово завершает процедуру.
Таким образом, весь блок кода определяет, что при щелчке правой кнопкой мыши на ячейке, содержащей числовое значение и не являющейся пустой, будет открыто диалоговое окно "Формат ячеек", а стандартное контекстное меню будет отменено.