Страницы: 1
RSS
Скрыть/показать вкладку (Tab) на Ленте (Ribbon)
 
Уважаемые коллеги!
Сделал свою надстройку с некоторыми функциями и поместил их на отдельную вкладку, например с именем " Tender ".
Эти функции должны работать только в определенных файлах - там где есть определенный лист, например с именем "Tenders". В других файлах эти функции работать НЕ будут.
Вопрос: как бы мне убирать/скрывать/удалять (?) эту вкладку " Tender " там, где она не нужна и, наоборот, показывать там где нужно?

Заранее спасибо за подсказки/идеи/наводки.

PS
всех с наступающим Новым годом и Рождеством! :)
 
Доброе время суток
В ribbon xml создаёте ссылку на обработчик события onLoad в надстройке макрос для получения объекта интерфейса IRibbonUI. Сохраняете его в переменной.
В ribbon xml создаёте ссылку на обработчик события visible вкладки в надстройке макрос для обработки его вызова, проверающий есть ли в активной книге лист " Tender " (перед этим проверьте есть ли вообще книги ;) )
В надстройке создаёте обработчик событий приложения, например в модуле эта книга
Private WithEvents xlApp As Application
Настраиваете для него обработчик события WorkbookActivate.
В этом обработчике запускаете метод InvalidateControl ранее сохранённой переменной IRibbonUI и передаёте Id объекта вкладки.
Так как-то, если кратенько.

С наступающими и вас!
 
Либо, как вариант:
в .hml добавляете
Код
<tab id="id" label="Tender" getVisible="GetVisible">
в код настройки:
Код
Sub GetVisible(control As IRibbonControl, ByRef visible)
    For Each sh In ActiveWorkbook.Sheets
        If sh.Name = "Tenders" Then
            visible = True
            Exit For
        Else
            visible = False
        End If
    Next
End Sub

p.s. с наступающим)
Изменено: heso - 29.12.2016 14:33:10
 
Андрей VG, heso
Спасибо за подсказки!
Чего-то я туплю - не получецца ничё :(
То объекта интерфейса IRibbonUI не сохраняется, то метод InvalidateControl  не вызывается ...
Но разберусь.

еще раз спасибо
 
Цитата
heso написал:
как только добавляю getVisible
Код
<tab id="tabTerderMain" label="TENDERS" visible="true" getVisible="getVisible">

так сразу перестает вообще показывать вкладку :(

а если убираю getVisible, то все ОК  :idea:
Код
<tab id="tabTerderMain" label="TENDERS" visible="true" > <!-- getVisible="getVisible" -->

есть идеи - в чём дело?
 
Цитата
Alex65 написал: getVisible
Я тоже ничего не вижу :(  Дистанционный просмотр кода сломался, увы.
 
Цитата
Андрей VG написал: Дистанционный просмотр кода сломался
Код
Public oRibbon As IRibbonUI
Sub OnRibbonLoad(ByRef iRibbon As IRibbonUI)
    Set oRibbon = iRibbon
End Sub

oRibbon - не запоминается - Nothing
:(
 
Цитата
Alex65 написал:
oRibbon - не запоминается
Значит у вас в процессе возникает ошибка и oRibbon отваливается.
Файлик бы посмотреть
 
Код
<tab id="tabTerderMain" label="TENDERS" visible="true" getVisible="getVisible">
Для начала удалите visible="true".
Затем..в vba-коде надстройки вы вставили код, что в сообщении #3?

И все таки пример покажите, да.
 
Спасибо
завтра с работы все пришлю
 
Цитата
heso написал: И все таки пример покажите, да
Покажу :)
Ходите по листам-вкладки меняются.
Допилите под себя
 
Doober! Спасибо! Допилю уж :)

С наступающими Новым годом и Рождеством!
Желаю Успехов и новых творческих находок!  :D
 
Спасибо всем кто откликнулся!
Особое спасибо Doober - всё получилось :)

Тема закрыта
Страницы: 1
Читают тему
Наверх