Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Удаление пользовательской панели инструментов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление пользовательской панели инструментов (Макросы/Sub)
Удаление пользовательской панели инструментов
and_evg Дата: Четверг, 04.05.2017, 13:21 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Всем доброго времени суток.
Имеется вот такой код для создания пользовательской панели:
[vba]
Код
Sub AddCustomMenu()
   ' Добавление меню
   With Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
      .Caption = "Архив"
      With .Controls
         ' Добавление и настройка первого пункта
         With .Add(Type:=msoControlButton)
            .FaceId = 280
            .Caption = "Просмотр"
            .OnAction = "Макрос1"
         End With
         ' Добавление вложенного меню
         With .Add(Type:=msoControlPopup)
            .Caption = "База данных"
            With .Controls
               ' Добавление и настройка первого пункта _
                вложенного меню
               With .Add(Type:=msoControlButton)
                  .FaceId = 1643
                  .Caption = "Поставщики"
                  .OnAction = "Макрос2"
               End With
               ' Добавление и настройка второго пункта _
                вложенного меню
               With .Add(Type:=msoControlButton)
                  .FaceId = 1000
                  .Caption = "Покупатели"
                  .OnAction = "Макрос3"
               End With
            End With
         End With
      End With
   End With
End Sub
[/vba]
Известно, что для удаления панели достаточно:
[vba]
Код
Application.CommandBars(1).Delete ' через индекс панели
'или
Application.CommandBars("Имя панели").Delete 'через имя панели
[/vba]
Но вот собственно вопрос. Как узнать индекс панели или её имя если она создана вышеприведенным кодом?
 
Ответить
СообщениеВсем доброго времени суток.
Имеется вот такой код для создания пользовательской панели:
[vba]
Код
Sub AddCustomMenu()
   ' Добавление меню
   With Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
      .Caption = "Архив"
      With .Controls
         ' Добавление и настройка первого пункта
         With .Add(Type:=msoControlButton)
            .FaceId = 280
            .Caption = "Просмотр"
            .OnAction = "Макрос1"
         End With
         ' Добавление вложенного меню
         With .Add(Type:=msoControlPopup)
            .Caption = "База данных"
            With .Controls
               ' Добавление и настройка первого пункта _
                вложенного меню
               With .Add(Type:=msoControlButton)
                  .FaceId = 1643
                  .Caption = "Поставщики"
                  .OnAction = "Макрос2"
               End With
               ' Добавление и настройка второго пункта _
                вложенного меню
               With .Add(Type:=msoControlButton)
                  .FaceId = 1000
                  .Caption = "Покупатели"
                  .OnAction = "Макрос3"
               End With
            End With
         End With
      End With
   End With
End Sub
[/vba]
Известно, что для удаления панели достаточно:
[vba]
Код
Application.CommandBars(1).Delete ' через индекс панели
'или
Application.CommandBars("Имя панели").Delete 'через имя панели
[/vba]
Но вот собственно вопрос. Как узнать индекс панели или её имя если она создана вышеприведенным кодом?

Автор - and_evg
Дата добавления - 04.05.2017 в 13:21
Manyasha Дата: Четверг, 04.05.2017, 13:40 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
and_evg, здравствуйте, а если так?
[vba]
Код
Public myCtrl
Sub AddCustomMenu()
' Добавление меню
Set myCtrl = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
With myCtrl
'...
End With
End Sub

Sub test()
    myCtrl.Delete
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеand_evg, здравствуйте, а если так?
[vba]
Код
Public myCtrl
Sub AddCustomMenu()
' Добавление меню
Set myCtrl = Application.CommandBars(1).Controls.Add(Type:=msoControlPopup, Temporary:=True)
With myCtrl
'...
End With
End Sub

Sub test()
    myCtrl.Delete
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 04.05.2017 в 13:40
_Boroda_ Дата: Четверг, 04.05.2017, 13:54 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16672
Репутация: 6479 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Когда ставите, то можно ставить в определенное место с помощью параметра Before, а потом оттуда забирать
https://msdn.microsoft.com/ru-ru....5).aspx


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКогда ставите, то можно ставить в определенное место с помощью параметра Before, а потом оттуда забирать
https://msdn.microsoft.com/ru-ru....5).aspx

Автор - _Boroda_
Дата добавления - 04.05.2017 в 13:54
and_evg Дата: Четверг, 04.05.2017, 14:21 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Manyasha, _Boroda_, Спасибо. Но интересно (на будущее), можно ли как либо узнать имя или индекс панели, при создании которой не указывалось данных параметров.
 
Ответить
СообщениеManyasha, _Boroda_, Спасибо. Но интересно (на будущее), можно ли как либо узнать имя или индекс панели, при создании которой не указывалось данных параметров.

Автор - and_evg
Дата добавления - 04.05.2017 в 14:21
Manyasha Дата: Четверг, 04.05.2017, 15:19 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
and_evg, а такой способ?
[vba]
Код
Application.CommandBars(1).Controls("Архив").Delete
[/vba]
узнать индекс можно так:
[vba]
Код
Sub test1()
    For Each ctr In Application.CommandBars(1).Controls
        If ctr.Caption = "Архив" Then
            Debug.Print ctr.Index
            Application.CommandBars(1).Controls(ctr.Index).Delete
            Exit For
        End If
    Next ctr
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеand_evg, а такой способ?
[vba]
Код
Application.CommandBars(1).Controls("Архив").Delete
[/vba]
узнать индекс можно так:
[vba]
Код
Sub test1()
    For Each ctr In Application.CommandBars(1).Controls
        If ctr.Caption = "Архив" Then
            Debug.Print ctr.Index
            Application.CommandBars(1).Controls(ctr.Index).Delete
            Exit For
        End If
    Next ctr
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 04.05.2017 в 15:19
and_evg Дата: Пятница, 05.05.2017, 07:44 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Manyasha, Спасибо!
почему то считал что к панели можно обратиться по имени как к элементу коллекции %)
[vba]
Код
Application.CommandBars("Архив").Delete
[/vba]

Может кто знает где почитать про коллекцию панелей? Желательно на русском!
 
Ответить
СообщениеManyasha, Спасибо!
почему то считал что к панели можно обратиться по имени как к элементу коллекции %)
[vba]
Код
Application.CommandBars("Архив").Delete
[/vba]

Может кто знает где почитать про коллекцию панелей? Желательно на русском!

Автор - and_evg
Дата добавления - 05.05.2017 в 07:44
Manyasha Дата: Пятница, 05.05.2017, 10:26 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
and_evg,
почему то считал что к панели можно обратиться по имени как к элементу коллекции

можно, только "Архив" - это не CommandBars.
[vba]
Код
Application.CommandBars(1)
[/vba] - обращение по индексу

[vba]
Код
Application.CommandBars("Worksheet Menu Bar")
[/vba] - обращение по имени

посмотрите это: http://excelvba.ru/code/PopupMenu


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеand_evg,
почему то считал что к панели можно обратиться по имени как к элементу коллекции

можно, только "Архив" - это не CommandBars.
[vba]
Код
Application.CommandBars(1)
[/vba] - обращение по индексу

[vba]
Код
Application.CommandBars("Worksheet Menu Bar")
[/vba] - обращение по имени

посмотрите это: http://excelvba.ru/code/PopupMenu

Автор - Manyasha
Дата добавления - 05.05.2017 в 10:26
and_evg Дата: Пятница, 05.05.2017, 11:29 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Manyasha, Спасибо
 
Ответить
СообщениеManyasha, Спасибо

Автор - and_evg
Дата добавления - 05.05.2017 в 11:29
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Удаление пользовательской панели инструментов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!