Отличается ли контекстное меню ячейки от меню блока ячеек в Excel

Обновлено: 21.11.2024

Как отключить контекстное меню на указанном листе или всей книге в Excel?

Знаете ли вы, как отключить контекстное меню в Excel? В этой статье будут показаны способы отключения контекстного меню не только на указанном листе, но и во всей книге.

Отключить контекстное меню на указанном листе с кодом VBA

Потрясающе! Использование эффективных вкладок в Excel, таких как Chrome, Firefox и Safari!
Сэкономьте 50 % своего времени и сократите количество кликов мышью каждый день!

В этом разделе говорится об отключении контекстного меню на указанном листе с помощью метода VBA. Пожалуйста, сделайте следующее.

<р>1. Откройте рабочий лист, для которого вы хотите отключить контекстное меню, щелкните правой кнопкой мыши вкладку листа и выберите «Просмотреть код» в контекстном меню.

<р>2. Затем появится окно Microsoft Visual Basic для приложений. Скопируйте и вставьте приведенный ниже сценарий VBA в окно кода.

Код VBA: отключить контекстное меню на указанном листе в Excel

<р>3. Нажмите клавиши Alt + Q, чтобы закрыть окно Microsoft Visual Basic для приложений.

С этого момента, когда вы попытаетесь щелкнуть правой кнопкой мыши любую ячейку этого рабочего листа, вы получите диалоговое окно Kutools for Excel, как показано ниже.

Отключить контекстное меню во всей книге с кодом VBA

Вы также можете отключить контекстное меню во всей книге с помощью следующего кода VBA.

<р>1. В рабочей книге необходимо отключить контекстное меню, нажмите клавиши Alt + F11, чтобы открыть окно Microsoft Visual Basic для приложений.

<р>2. В окне Microsoft Visual Basic для приложений дважды щелкните ThisWorkbook на левой панели Project, затем скопируйте и вставьте приведенный ниже код VBA в окно ThisWorkbook (Code). Смотрите скриншот:

Код VBA: отключить контекстное меню во всей книге в Excel

<р>3. Нажмите клавиши Alt + Q, чтобы закрыть окно Microsoft Visual Basic для приложений.

С этого момента, когда вы пытаетесь щелкнуть правой кнопкой мыши любую ячейку в книге, появится диалоговое окно Kutools for Excel, чтобы напомнить вам, что контекстное меню отключено. Смотрите скриншот:

Время от времени вам может потребоваться запретить пользователям удалять или вставлять строки или столбцы на листе Excel. Кроме того, было бы неплохо заблокировать любую ненужную сортировку и фильтрацию. Контекстные меню Excel (всплывающее меню, вызываемое правой кнопкой мыши) предоставляют пользователю доступ ко многим функциям в зависимости от выбранной в данный момент части рабочего листа. Этот доступ может стать кошмаром для программиста, поскольку в лексиконе Excel VBA нет способа отловить и остановить эти действия.

Я знаю, что защита рабочих листов может помочь, и я использую ее, но бывают случаи, когда рабочие листы необходимо снять с защиты, чтобы пользователь (или привилегированный пользователь) мог выполнить некоторую работу. Это состояние незащищенности делает доступными простые пункты контекстного меню УДАЛИТЬ, ВСТАВИТЬ, СОРТИРОВАТЬ, ФИЛЬТР, < em>СКРЫТЬ, ПОКАЗАТЬ и т. д. Из-за этого пользователю слишком легко «вмешаться» в книгу, что создает риск.

Как можно отключить (и снова включить) эти элементы меню?

В этом посте объясняется, насколько просто с помощью Visual Basic для приложений (VBA) динамически и в определенное время обработки данных изменять контекстные меню.

Есть 2 команды, которые сделают эту работу:

Однако они отличаются надежностью и точностью. Первая команда выбирает элемент меню для включения, сначала называя контекстное меню «Ячейка», а затем выбирая элемент управления в этом меню, используя текст «метки» «Очистить содержимое». Второй аргумент «Очистить содержимое» — это то, что вводится для отображения пункта меню «Очистить содержимое». Если вы знакомы с программированием интерфейса Windows, вы знаете, что перед буквой «ускоритель клавиатуры» стоит &. В данном случае «н».

Вторая команда ссылается на меню «Строка», но использует более стабильную и точную ссылку — идентификатор элемента управления. Почему это лучшая команда? Идентификатор элемента управления индексирует определенный элемент управления и действует только на элементы управления с этим идентификатором.Первая команда опирается на текст, который вы видите в меню. Это может ввести в заблуждение. Например, команда будет работать с пунктом меню «Удалить» с помощью «&Удалить» или «&Удалить…», но также может вызвать ошибку, говорящую о том, что аргумент неверен.

Итак, как найти идентификатор элемента управления?

В каждом продукте Microsoft Office доступны электронные таблицы со всеми идентификаторами элементов управления, из которых вы можете найти то, что вам нужно. Я нашел лучший способ получить правильный идентификатор элемента управления для определенного пункта контекстного меню с помощью бесплатной программы с веб-сайта Add-in Express, которая называется «Встроенный сканер элементов управления». Встроенный сканер элементов управления для отображения имен панелей команд и идентификаторов элементов управления в удобном для чтения иерархическом списке. Вы можете получить его копию здесь.

На следующем изображении используемого Сканера встроенных элементов управления вы можете увидеть список пунктов контекстного меню «Хост-приложение», Excel и «Ячейка». Красная стрелка указывает на команду Удалить, указанную как «&Удалить…» с «Идентификатором Office» 292.

Используя эту информацию, вы можете выполнить команду, чтобы отключить пункт меню "Удалить" в контекстном меню, которое появляется, когда вы щелкаете правой кнопкой мыши по ячейке, например:

К сожалению, выполнение этого кода вызвало ошибку выполнения 5 , "Недопустимый вызов процедуры или аргумент". Если вы вернетесь к сканеру встроенных элементов управления и посмотрите на команду Удалить для меню «Строка» и «Столбец» (контекстные меню, открывающиеся при выборе строки или столбца), вы увидите разницу. Хотя текст элемента меню идентичен, идентификаторы элементов управления различаются. Это проблема, когда вы зависите от текста меню, вы можете пытаться ссылаться на разные элементы управления с помощью одной команды. Это не работает последовательно и надежно. Мы знаем, что аргумент меню Cell правильный, но если мы изменим «&Delete…» на «Delete…» и запустим его снова, мы получим:

Намного лучшее и более предсказуемое решение…

Используйте метод FindControl для уверенного и надежного изменения меню. Хотя его можно использовать как одну или две команды, изменение многих элементов управления может стать очень подробным. Я обнаружил, что для моих нужд циклы For Each работают хорошо. Последний пример кода — это то, как я реализовал изменения меню, используя циклы с минимальным кодом. Обратите внимание, что массив заполняется из хорошо прокомментированного листинга, что упрощает обновление кода. Я должен признать, что этот код был «настроен» с использованием предложений из этого поста на StackOverflow.

И последнее примечание…

Остерегайтесь, что эти команды навсегда изменяют приложение меню Excel. Во всех новых книгах элементы контекстного меню будут отключены в соответствии с вашим кодом. Вам нужно разрешить сброс, если вы хотите позже использовать исходную функциональность. Для этого вы просто меняете False на True и снова запускаете команду. Вы можете использовать события Workbook_Open и Workbook_BeforeClose, чтобы инициировать изменения, возвращая все в нормальное состояние при закрытии. Однако использование событий Worksheet_Activate и Worksheet_Deactivate также подходит. Если вы не забудете все исправить, когда книга закроется!

Дополнительная информация…

В зависимости от ваших способностей и желания получить дополнительную информацию вы также можете прочитать этот прекрасный пост, который также охватывает эту тему:

Когда вы щелкаете правой кнопкой мыши по ячейке, Excel предоставляет вам многофункциональное контекстное меню, которое позволяет выполнять любые действия. Вы можете добавить некоторые функции в это контекстное меню, особенно если вы часто ими пользуетесь.

К сожалению, вы не можете редактировать контекстные меню так же, как вы можете редактировать другие меню — используя «Настроить» в меню «Инструменты». Вместо этого вы должны управлять контекстными меню через VBA.

Если вы хотите добавить элемент в контекстное меню, которое появляется при щелчке правой кнопкой мыши по ячейке, вы можете использовать следующий код:

Все, что вам нужно сделать, это установить для свойства .Caption любой текст меню, который вы хотите использовать, а затем изменить свойство .OnAction так, чтобы оно указывало на макрос или команду, которую вы хотите использовать. Если позже вы захотите удалить пункт меню, вы можете использовать следующий макрос:

Чтобы использовать это, измените текст «Моя процедура» на любой текст, который вы использовали в свойстве .Caption предыдущего макроса. Оператор On Error используется в этом макросе только в том случае, если указанный элемент макроса не был добавлен ранее.

Немного изменив макрос, вы можете указать, что добавление в контекстное меню должно происходить только при щелчке правой кнопкой мыши на определенных ячейках. Следующий макрос проверяет, щелкаете ли вы по ячейке в диапазоне C10:E25. Если да, то он добавляет пункт меню для вашей процедуры в конце контекстного меню.

В редакторе VBA этот макрос необходимо добавить на конкретный рабочий лист, с которым вы хотите его использовать.Все, что вам нужно сделать, это дважды щелкнуть этот рабочий лист в Project Explorer (верхний левый угол редактора VBA), а затем ввести его в окно кода для этого рабочего листа.

Как и в предыдущем макросе, все, что вам нужно сделать, это изменить параметры, указанные для свойств .Caption и .OnAction. Кроме того, вы можете изменить диапазон ячеек, который считается «действительным» при добавлении пункта меню — просто измените спецификацию диапазона «c: 10: e25» на желаемый диапазон. Вы даже можете использовать именованный диапазон вместо диапазона ячеек, что очень удобно, если допустимый диапазон действительно представляет собой набор несмежных ячеек.

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию. Нажмите здесь, чтобы открыть эту специальную страницу в новой вкладке браузера.

ExcelTips – это экономичное обучение работе с Microsoft Excel. Этот совет (2064) относится к Microsoft Excel 97, 2000, 2002 и 2003.

Биография автора

На его счету более 50 научно-популярных книг и множество журнальных статей. Аллен Уайатт является всемирно признанным автором. Он является президентом Sharon Parq Associates, компании, предоставляющей компьютерные и издательские услуги. Узнайте больше об Аллене.

Если щелкнуть правой кнопкой мыши в Excel, появится всплывающее меню со списком команд, которые вы можете использовать. Список меняется в зависимости от того, где вы щелкнули, поэтому он называется «Контекстное меню».

Но, несмотря на то, что эти всплывающие меню полезны, в них могут быть не все команды, которые вам нравятся. Или команды могут быть там, но спрятаны на несколько уровней глубоко в подменю.

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

AlexJ спешит на помощь

К счастью, есть хорошие новости! На прошлой неделе я получил известие от своего друга и земляка-канадца AlexJ. Ему надоело ездить в QAT, где хранились его любимые команды, поэтому он создал код, добавляющий новые элементы в контекстные меню, и прислал мне свой образец рабочей тетради.

Спасибо, AlexJ, за то, что поделились своим образцом файла, так что мы все можем настроить наши контекстные меню. Я позволю AlexJ рассказать вам свою историю, а я добавлю в этот код несколько моих любимых команд.

Как это было

Алекс Дж.: В последнее время большая часть моей работы связана с просмотром таблиц и сводных таблиц с командой на собраниях и конференциях MS Lync. Когда мы это делаем, обычно приходится фильтровать таблицы, сводные таблицы или диапазоны для увеличения групп данных.

У меня была привычка использовать элементы управления в верхней части таблицы для выбора или очистки фильтров. Однако делать это постоянно стало неприятно.

Используйте фильтры правой кнопки мыши

Я заметил, что во всплывающем меню правой кнопки мыши (контекстное меню) есть группа для Фильтр, и я могу использовать такие элементы, как Фильтровать по значению выбранной ячейки.< /p>

Небольшое дополнительное преимущество: если вы используете эту команду для диапазона, к которому не применены фильтры, она автоматически применяет фильтры как часть операции «Фильтровать по выбранному значению ячейки».

Это сделало повторяющиеся действия более эффективными, но недостаточно. Вам необходимо:

  1. Щелкните правой кнопкой мыши по ячейке.
  2. Найдите команду Фильтр и укажите на нее.
  3. Найдите нужный элемент Выбрать по выбранной ячейке… и нажмите на него.

Я думаю, что меня замедляют дополнительные когнитивные усилия, а не просто количество кликов.

Настройка контекстного меню

Чтобы найти более эффективное решение, я нашел фрагмент кода в разделе Настройка контекстных меню во всех версиях Microsoft Excel, написанном Роном де Брюином. (Я не буду повторять методику добавления элементов в контекстные меню с помощью VBA или Custom UI Editor — Рон объясняет ее очень эффективно.)

В статье Рона упоминается надстройка Оле П. Эрландсена для инструментов панели команд, позволяющая находить имена строк контекстного меню, идентификаторы элементов управления и идентификаторы лиц изображений элементов управления.

Я узнал, что, пока Рон объясняет, что контекстное меню «Ячейка» имеет 2 разные версии:

Есть 2 других, которые существуют в зависимости от того, является ли выбранный объект:

Инструмент надстройки Оле был ДЕЙСТВИТЕЛЬНО полезен, чтобы понять это. После установки он появится на вкладке «Надстройки» на ленте.

Выберите команду для отображения списка всех элементов управления CommandBar

Затем выберите панель команд, чтобы увидеть ее элементы управления

Из списка я смог определить контекстное меню для таблиц и сводных таблиц, а также элементы управления, которые мне нужны в каждой из них (все они имеют несколько разные характеристики).

Пример кода для выбора фильтра

Основываясь на этой информации, я создал код для добавления двух новых команд в верхнюю часть контекстного меню правой кнопки мыши:

  • Фильтровать по значению выбранной ячейки
  • Показать все (или очистить фильтр)

При желании вместо этого вы можете использовать один из других параметров Фильтровать по:

  • Фильтрация по цвету выбранной ячейки
  • Фильтрация по цвету шрифта выбранной ячейки
  • Фильтровать по значку выбранной ячейки

Я установил код в свою личную книгу макросов (personal.xla или personal.xlsb) и добавил код в модуль ThisWorkbook, чтобы активировать функцию при загрузке личной книги (это закомментировано в образце файл).

В результате теперь у меня есть контекстные меню, позволяющие выбирать фильтры (и очищать их) всего одним дополнительным щелчком мыши после щелчка правой кнопкой мыши.

Вот контекстное меню для именованной таблицы:

А вот и контекстное меню для сводной таблицы:

Загрузить образец файла

Чтобы просмотреть код AlexJ и скопировать его в свой файл, посетите страницу примеров файлов AlexJ на моем веб-сайте Contextures.

В разделе VBA найдите VB0002 — Настройка контекстных меню.

Скопируйте код из модуля ThisWorkbook и модуля mCustomPopup.

Оставить ответ Отменить ответ

Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.

Читайте также: