Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
1

Удалить кнопки в контекстном меню

24.01.2013, 01:32. Показов 4973. Ответов 25
Метки нет (Все метки)

Подскажите пожалуйста я решил удалить лишнии кнопки в меню, покопался в инете и нашел как это делает но почему ту у меня выдает ошибку, что я не так делаю?

Visual Basic
1
2
3
4
5
Private Sub Workbook_Open()
    
    Application.CommandBars("Вид").Delete
 
End Sub
Подскажите можно поставить пароль на свой созданный раздел в меню, если я нажимаю на свой раздел в меню чтобы он запрашивал пароль, после чего он откроется.

Добавлено через 4 часа 44 минуты
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2013, 01:32
Ответы с готовыми решениями:

Не могу удалить лист в Project (в контекстном меню команда недоступна)
Не доступно в контекстном меню команда Remove, не могу удалить лист.

Скрыть/удалить/сделать недоступными пункт "Специальная вставка" в контекстном меню
Что нужно: скрыть/удалить/сделать недоступными пункт "Специальная вставка" в контекстном меню и...

MsoControlEdit в контекстном меню
Доброго времени суток. Код работает: With...

Создание своего пункта в контекстном меню и выполнение привязанной к этому пункту задачи
Здравствуйте! Подскажите, пожалуйста, как создать свой пункт во всплывающем меню? Excel MS...

25
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
28.01.2013, 18:18  [ТС] 2
Подскажите как удалить кнопку?
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
28.01.2013, 21:56 3
Вы пытаетесь удалить не кнопку, а все меню "Вид". Попробуйте так:
Код
Application.CommandBars("View").Controls("Строка &формул").Delete
А вообще в версиях, начиная с 2007 это можно делать через XML, но со своими нюансами. Придется через XML восстанавливать вид каждой вкладки(без ненужных Вам команд), т.к. манипулировать стандартными не получится.
Начиная с версии 2010 изменять видимость можно без макросов(применяется к приложению в целом). А вот макросом как раз может не получится.

Добавлено через 49 минут
Кстати, если хотите редактировать именно контекстное меню(всплывающее при нажатии правой кнопкой мыши), то это сделать куда как проще:
Код
CommandBars("Cell").Controls("В&ырезать").Delete
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
29.01.2013, 00:23  [ТС] 4
Цитата Сообщение от The_Prist Посмотреть сообщение
Вы пытаетесь удалить не кнопку, а все меню "Вид". Попробуйте так:
Код
Application.CommandBars("View").Controls("Строка &формул").Delete

Добавлено через 49 минут
Кстати, если хотите редактировать именно контекстное меню(всплывающее при нажатии правой кнопкой мыши), то это сделать куда как проще:
Код
CommandBars("Cell").Controls("В&ырезать").Delete
А если я добавить хочу тогда как?
И как сделать чтобы работало только для данного документа
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
29.01.2013, 08:23 5
Добавить
Код
CommandBars("Cell").Controls.Add
Чтобы работало только для одного документа присмотритесь к событиям книги: Workbook_Activate, Workbook_Deactivate, Workbook_Open, Workbook_Beforeclose
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
29.01.2013, 15:33  [ТС] 6
The_Prist, Я здесь нашел пример один, не могу до конца разобраться как сделать, подскажите пожалуйста

Вот пример кода

Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
    If Union(Target.Range("A1"), Range("data")).Address = Range("data").Address Then
        CommandBars("MyShortcut").ShowPopup
        Cancel = True
    End If
End Sub
Тут как я понял Range берет ячейки из Диспетчера имен, а как мне сделать чтобы он брал с диапазона

Visual Basic
1
2
3
4
Range("a" & rrow & ":eq" & Cells(rrow, 6).End(xlDown).Row)

 
Range("a" & rrow & ":eq" & .Cells(.Rows.Count, 2).End(xlUp)
Это я взял со своего кода
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
29.01.2013, 20:22 7
Скорее Вам надо через Intersect:
Код
Private Sub Worksheet_BeforeRightClick(ByVal Target As Excel.Range, Cancel As Boolean)
    If Not Intersect(Target, Range("a" & rrow & ":eq" & Cells(rrow, 6).End(xlDown).Row)) is Nothing Then
        CommandBars("MyShortcut").ShowPopup
        Cancel = True
    End If
End Sub
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
30.01.2013, 01:11  [ТС] 8
The_Prist, что то у меня не получается

Вот код я ставлю его на Лист

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 
    
    If Not Intersect(Target, Range("a" & rrow & ":eq" & Cells(rrow, 6).End(xlDown).Row)) Is Nothing Then
        CommandBars("MyShortcut").ShowPopup
        Cancel = True
    End If
End Sub
Этот код ставлю ЭтаКнига

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call DeleteShortcut
End Sub
 
Private Sub Workbook_Open()
 
   
Call CreateShortcut
 
End Sub
И в модуль ставлю этот код

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub CreateShortcut()
    Dim myBar As CommandBar
    Dim myItem As CommandBarControl
    
    DeleteShortcut
    Set myBar = CommandBars.Add _
      (Name:="MyShortcut", Position:=msoBarPopup, Temporary:=True)
    
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Добавить..."
        .OnAction = "add_row"
        .FaceId = 1554
    End With
        
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Удалить..."
        .OnAction = "dell_row"
        .FaceId = 217
    End With
        
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Утвердить..."
        .OnAction = "red_row"
        .FaceId = 291
    End With
 
 
End Sub
 
Sub DeleteShortcut()
    On Error Resume Next
    CommandBars("MyShortcut").Delete
End Sub
Не понимаю почему не работает меню мое, можете посмотреть я прикрепил архив, пароль к файл 111222
0
Вложения
Тип файла: zip попов.zip (169.1 Кб, 7 просмотров)
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
30.01.2013, 09:40 9
Вобще-то все нормально работает. За исключением того, что у Вас переменная rrow нигде не объявлена и значение ей тоже нигде не назначается. Поэтому получаете законную ошибку, т.к. диапазон не может начинаться с нулевой строки. Должна быть минимум 1.
Судя по листингу - Вам, наверное, вот такой вариант подойдет вполне:
Код
    If Not Intersect(Target, Range("a11:eq" & Cells(Rows.Count, 6).End(xlDown).Row)) Is Nothing Then
        CommandBars("MyShortcut").ShowPopup
        Cancel = True
    End If
0
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
30.01.2013, 13:08  [ТС] 10
The_Prist, Я заменил на ваш код все равно не отображается мое меню
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
30.01.2013, 13:30 11
А Вы по какому событию его видеть хотите? У Вас сейчас меню всплывает при двойном клике на ячейке ниже 10 строки.
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
30.01.2013, 14:33  [ТС] 12
The_Prist, Все равно не получается, мне нужно чтобы выделяю строчку ниже 10 нажимаю на правую кнопку мышки и у меня отображается только мое меню
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
30.01.2013, 15:11 13
Эх...Ну Вы читали хоть, что я написал? У Вас и не появится меню, т.к. Вы повесили его появление на событие двойного клика в ячейке. Чтобы появлялось по событию правого клика его и надо обрабатывать:
Visual Basic
1
2
3
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
 
End Sub
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
30.01.2013, 18:17  [ТС] 14
The_Prist, Спасибо большое я разобрался!!! Вы можете подсказать где можно посмотреть какие цифры для ярлычков меню

Например FaceId = 217

и как поставить полоску деления в меню

Добавлено через 5 минут
Как еще к пункту добавить клавишу, например Ctrl
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
30.01.2013, 19:35 15
Да простят меня модераторы: попробую дать ссылку на свой сайт, где лежит надстройка для определения FaceId иконок. Панель иконок FaceID

Если ссылку удалят - пишите в личку, перешлю ссылку туда.
а про клавишу Ctrl ничего не понял. Если имели ввиду запуск клавишами - то смотрите в сторону Application.OnKey
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
30.01.2013, 21:16  [ТС] 16
The_Prist, спасибо буду изучать.

Добавлено через 1 час 25 минут
The_Prist, Я нашел пример

Visual Basic
1
2
3
4
Private Sub Auto_Open()
    Application.OnKey Key:="^c", Procedure:="NewName"
    ' Сочетание клавиш CTRL + C (c)
End Sub
Но я не пойму как для моего случая сделать

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub CreateShortcut()
    Dim myBar As CommandBar
    Dim myItem As CommandBarControl
    
    DeleteShortcut
    Set myBar = CommandBars.Add _
      (Name:="MyShortcut", Position:=msoBarPopup, Temporary:=True)
    
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Добавить строку..."
        .OnAction = "add_row"
        .FaceId = 194
    End With
End Sub
 
Sub add_row()
 
       Sheets("Услуги").Unprotect Password:="111222"
       
        Rows(ActiveCell.Row).Insert
        Rows(ActiveCell.Row + 1).Copy Rows(ActiveCell.Row)
       Sheets("Услуги").Protect Password:="111222"
 
End Sub
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
30.01.2013, 21:30 17
Итак. Создаете отдельную процедуру:
Код
Sub MyPopup()
    CommandBars("MyShortcut").ShowPopup
End Sub
А на клавиши тогда прописываете так:
Код
Application.OnKey Key:="^c", Procedure:="MyPopup"
Не забудьте перед закрытием книги очистить переназначение для клавиш:
Код
Application.OnKey Key:="^c"
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
31.01.2013, 00:13  [ТС] 18
Я сделал, но у меня когда я нажимаю клавиши Ctrl+C у меня открывается мое контекстное меню, что не так сделал явно.

Я создал процедуру

Visual Basic
1
2
3
Sub MyPopup()
    CommandBars("MyShortcut").ShowPopup
End Sub
Добавил клавиши

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub CreateShortcut()
    Dim myBar As CommandBar
    Dim myItem As CommandBarControl
    
    DeleteShortcut
    Set myBar = CommandBars.Add _
      (Name:="MyShortcut", Position:=msoBarPopup, Temporary:=True)
    
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Добавить строку..."
        .OnAction = "add_row"
        .FaceId = 194
        Application.OnKey Key:="^c", Procedure:="MyPopup"
    End With
End Sub
А вот очистить решил поставить сюда (Эта Книга), но я не уверен что правильно

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Workbook_Open()
  Application.OnKey Key:="^c"
 '   ActiveWorkbook.Unprotect Password:="112233"
 '   Sheets("МТР").EnableOutlining = True
 '   Sheets("МТР").Protect Password:="112233", Scenarios:=True, UserInterfaceOnly:=True
  Sheets("Справочник товаров").Protect Password:="111222", UserInterfaceOnly:=True
Sheets("Справочник товаров").EnableAutoFilter = True
 
      Const MyPassword = "111222"
    With Sheets("Услуги")
        .Unprotect Password:=MyPassword
        .EnableOutlining = True
        .Protect Password:=MyPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
            AllowFiltering:=True, UserInterfaceOnly:=True
    End With
    Set wsDict = ThisWorkbook.Worksheets("Справочник товаров")
    Set MyRange = Nothing
    
Call CreateShortcut
 
End Sub
0
1312 / 291 / 65
Регистрация: 13.11.2008
Сообщений: 604
31.01.2013, 07:52 19
Так Вы при открытии книги очищаете. Вчитайтесь в имя процедуры Workbook_Open: Книга_Открыть
Здесь Вам как раз надо вставлять Application.OnKey Key:="^c", Procedure:="MyPopup"

А вот на событие Workbook_BeforeClose() - очищать. Как проще найти эти процедуры:
-в окне редактора VBA, в модуле ЭтаКнига ищете вверху над полем(в котором текст макроса пишеше) выпадающий список слева. Выбираете в нем Workbook. Затем в правом выпадающем списке выбираете нужную процедуру. Она вставляется, а Вы лишь вписываете нужный код внутрь.
1
4 / 4 / 0
Регистрация: 16.01.2013
Сообщений: 1,228
31.01.2013, 13:48  [ТС] 20
The_Prist, что не получается, вот сделал для своего примера

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call DeleteShortcut
   Application.OnKey Key:="^z"
 
End Sub
Private Sub Workbook_Open()
  
  Application.OnKey Key:="^z", Procedure:="MyPopup"
 '   ActiveWorkbook.Unprotect Password:="112233"
 '   Sheets("МТР").EnableOutlining = True
 '   Sheets("МТР").Protect Password:="112233", Scenarios:=True, UserInterfaceOnly:=True
  Sheets("Справочник товаров").Protect Password:="111222", UserInterfaceOnly:=True
Sheets("Справочник товаров").EnableAutoFilter = True
 
      Const MyPassword = "111222"
    With Sheets("Услуги")
        .Unprotect Password:=MyPassword
        .EnableOutlining = True
        .Protect Password:=MyPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
            AllowFiltering:=True, UserInterfaceOnly:=True
    End With
    Set wsDict = ThisWorkbook.Worksheets("Справочник товаров")
    Set MyRange = Nothing
    
Call CreateShortcut
 
End Sub
и в модуле

Visual Basic
1
2
3
Sub MyPopup()
    CommandBars("MyShortcut").ShowPopup
End Sub
но все равно не добавляет

это мы делаем для кнопки Добавить строку и мы прописываем "MyShortcut"

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub CreateShortcut()
    Dim myBar As CommandBar
    Dim myItem As CommandBarControl
    
    DeleteShortcut
    Set myBar = CommandBars.Add _
      (Name:="MyShortcut", Position:=msoBarPopup, Temporary:=True)
    
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
   
    With myItem
        .Caption = "&Добавить строку...             &Ctrl+Z"
        .OnAction = "add_row"
        .FaceId = 194
        
    End With
End Sub
а если будет еще добавлена кнопка, "MyShortcut" я так понимаю для всего меню одна используется

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub CreateShortcut()
    Dim myBar As CommandBar
    Dim myItem As CommandBarControl
    
    DeleteShortcut
    Set myBar = CommandBars.Add _
      (Name:="MyShortcut", Position:=msoBarPopup, Temporary:=True)
    
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
   
    With myItem
        .Caption = "&Добавить строку...             &Ctrl+Z"
        .OnAction = "add_row"
        .FaceId = 194
        
    End With
              
    Set myItem = myBar.Controls.Add(Type:=msoControlButton)
    With myItem
        .Caption = "&Удалить строку...               &Ctrl+X"
        .OnAction = "dell_row"
        .FaceId = 108
    End With
End Sub
"MyShortcut" я так понимаю для всего меню одна используется, что то я тут не понимаю
0
Вложения
Тип файла: zip попов.zip (175.5 Кб, 6 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2013, 13:48

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Как сделать недоступным в контекстном меню пункт "формат ячеек"?
1.На листе при вводе данных нужно при перемещении курсора по ячейкам "пропустить" одну или...

Помогите разобраться в контекстном меню плз (нажатие правой кнопки))
У меня возникла проблема следующего характера: Мне необходима возможность ввести в поле при...

Как удалить в контекстном меню windows пункты "создать" и "удалить"
Собственно тот-же вопрос - Как удалить в контекстном меню windows пункты "создать" и "удалить"?

Как изменить пункт "удалить" в контекстном меню
Доброго времени суток. Мне внезапно взбрендило изменить пункт "удалить" в контекстном меню на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.