Страницы: 1
RSS
Скрытие пунктов меню, вызываемого по ПКМ
 
Уважаемые гуру форума, подскажите как можно провернуть небольшой финт ушами ;) . Ситуация такая. Потребовалось обеспечить возможность работы пользователя только со "своими" строками на листе (имеется отдельная колонка в которой есть соответствующие данные). Все это я реализовал через UserForm с выбором пользователя+паролем. Все это работает, если кому покажется интересным или нужным - выложу. Но вопрос не этом. Раскрытие всех строк (например для меня) я тоже реализую через кнопку + InputBox с паролем, с этим проблем возникнуть не должно, но что помешает пользователю тупо выделить все строки и выбрать в меню "показать"? Поискав в сети, я понял (надеюсь правильно), что отследить скрытие/раскрытие строк нельзя и, следовательно, нельзя это запретить. При этом в сети встречалась информация о корректировке контекстного меню через API. Так вот наконец-то вопрос. Как убрать (или сделать неактивными) строки контекстного меню "скрыть" и "показать"? Причем КРАЙНЕ желательно, чтобы такая корректировка меню была только на указанном в коде листе (листах), на всех прочих листах, не говоря уже о других файлах все должно быть по-старому. Можно ли это осуществить и как, если можно? Заранее спасибо всем откликнувшимся.
 
Уважаемый Олег, посмотрите вот здесь,
ссылка
найдете всё, что Вы спрашиваете.
В файле на листе 1 нажмите ПКМ на выделенной строке
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Спасибо, Михаил. Это возможно частично решит проблему, но как быть с тем, что меню корректируется на всех листах? Добавка к Вашему коду
Код
If ActiveSheet.Name = "Лист1" Then ...
проблемы не решает :cry:  
 
Да и кажется на все новые файлы корректировка распространилась, теперь придется наверное офис переставлять 8-0  
 
Цитата
OlegO написал:
придется наверное офис переставлять
Не работают/пропали меню

вообще, чтобы подменять меню можно каждый раз его создавать при нажатии правой кнопки мыши.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
OlegO написал:
проблемы не решает
Ну, это как использовать. А вообще - очень даже решает.
Цитата
OlegO написал:
теперь придется наверное офис переставлять
можно, конечно, и так. Но проще - тоже можно.
Код
    For Each MySubMenu In Application.CommandBars("Row").Controls
        If MySubMenu.Caption = "Скрыт&ь" Or MySubMenu.Caption = "Показа&ть" Then
            MySubMenu.Enabled = True
        End If
'        strControlName = strControlName & vbCrLf & MySubMenu.Caption
    Next
Изменено: Михаил Лебедев - 02.06.2017 19:48:49
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Спасибо большое, The_Prist за Ваш совет, избавили от перестановки офиса (дело знакомое конечно, но немного нудное). А что касается моего вопроса, как сделать эту самую подмену о которой Вы упомянули?
 
Цитата
Михаил Лебедев написал:
Ну, это как использовать. А вообще - очень даже решает.
И Вам спасибо Михаил за отклик по восстановлению меню, но уже исправил по совету от The_Prist :D. И еще, нельзя ли поподробнее про использование Вашего кода с добавлением проверки на имя листа. Я пытался вставить эту проверку до начала кода, сразу после Dim..., разве не так надо было? Или Вы что-то другое имели ввиду?
Изменено: OlegO - 02.06.2017 19:46:58
 
Цитата
OlegO написал:
использование Вашего кода с добавлением проверки на имя листа
Добавил файл в #6
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
ЗдОрово, Михаил. Спасибо большое, именно так и хотел, завтра на работе буду примерять в реальному заданию. Разрешите еще вопрос по данной теме. Мои предположения в посте №1 о невозможности отследить скрытие/раскрытие строк верны? Вообще эту задачу по запрету "несанкционированному" отображению строк можно решить по иному, без корректировки меню?
Изменено: OlegO - 02.06.2017 19:59:04
 
Вообще, если используете для разграничения ввода стандартную защиту листа, то достаточно оставить незаблокированным только часть столбцов. Тогда в меню пункты для строк сами по себе будут неактивными.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, я сначала подумал о защите листа, но по заданию следует разграничить доступ к листу между несколькими пользователями, с полным доступом к "своим" строкам, а при защите листа будет скрыто слишком много  пунктов меню, да и пароль для снятия защиты один на всех. Поэтому я и предпочел свой вариант с скрытием "чужих" строк через форму с индивидуальными паролями для каждого пользователя. Вообще-то немного непонятно почему в Речмонде не сделали возможность отслеживания события скрытия/раскрытия, ведь многие другие события отслеживаются, вот и делали бы все ;)  
 
Цитата
OlegO написал:
и пароль для снятия защиты один на всех
тут Вы не правы. Excel позволяет разграничить диапазоны между пользователями с разными паролями: Каждому пользователю свой лист/диапазон

Скрыть строки для разных пользователей здесь не получится, но разграничить области действия на листе - без проблем. Плюс можно комбинировать методы через форму VBA и стандартную защиту.
Изменено: The_Prist - 02.06.2017 21:25:08
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Доброго времени, скачал, запустил, вопрос не в том, что дальше, а в том, что исходно эксель ругается на строку  
Код
   'Call DeleteFromCellMenu
стоит винда 10 и офис 16, почему?
и народ, как корректно добавить картинку?
Изменено: Irbis_evs - 02.06.2017 22:11:06
Инженер не тот, кто все знает, а тот кто знает где найти ответ.
Страницы: 1
Читают тему
Наверх