Здравствуйте! У меня проблема совсем простая, во всяком случае, с виду представляется простой. Создаю XlaM, на этапе проектирования и разработки работаю с XlsM. Создал закладку. на ней несколько групп кнопок. Ribbon создал по образцу, найденному в Сети.
Итак, моя проблема: Я хочу, чтобы при нажатии на кнопку её размер менялся с большого Large на маленький Small, при повторном нажатии - наоборот. Собственно, таких кнопок две-три-четыре. Нажатие на эти кнопки задаёт тип реакции для других кнопок Ribbon-ленты. Чтобы юзер видел, в каком режиме он находится, кнопки должны раздуваться/сжиматься.
При открытии файла - если это XlsM, или при запуске Excel"а, если это XlaM, срабатывает вот такой код: [vba]
Код
Sub GetSize(control As IRibbonControl, ByRef Size)
Const Large As Integer = 1 Const Small As Integer = 0
Select Case control.ID
Case "aButton01": Size = Large Case "aButton02": Size = Small Case "aButton03": Size = Small ...........
[/vba] Надо как-то заставить эту функцию сработать не только при открытии, а при каждом нажатия на некоторые кнопки.
В порядке уточнение - пусть с кнопками связаны некие функции: [vba]
Код
Sub RunMacro(control As IRibbonControl) Select Case control.ID
Case "aButton01": Application.Run "Ribbon_A_01" Case "aButton02": Application.Run "Ribbon_A_02" ...............
[/vba]
Вот эти функции: [vba]
Код
Sub Ribbon_A_01 RMShiftMode = 2 End Sub Sub Ribbon_A_02() RMShiftMode = 3 End Sub
[/vba]
Правильно ли я понимаю, что надо как-то из функции Ribbon_A_01 вызвать функцию GetSize? И если это правильно, то как это сделать?
PS Видимо, аргумент "control" это и есть кнопка aButton01. Как же его задать, где получить ссылку на этот объект aButton01?
Должно быть что-то вроде: [vba]
Код
Call GetSize(Controls("aButton01"), 1)
[/vba]
Здравствуйте! У меня проблема совсем простая, во всяком случае, с виду представляется простой. Создаю XlaM, на этапе проектирования и разработки работаю с XlsM. Создал закладку. на ней несколько групп кнопок. Ribbon создал по образцу, найденному в Сети.
Итак, моя проблема: Я хочу, чтобы при нажатии на кнопку её размер менялся с большого Large на маленький Small, при повторном нажатии - наоборот. Собственно, таких кнопок две-три-четыре. Нажатие на эти кнопки задаёт тип реакции для других кнопок Ribbon-ленты. Чтобы юзер видел, в каком режиме он находится, кнопки должны раздуваться/сжиматься.
При открытии файла - если это XlsM, или при запуске Excel"а, если это XlaM, срабатывает вот такой код: [vba]
Код
Sub GetSize(control As IRibbonControl, ByRef Size)
Const Large As Integer = 1 Const Small As Integer = 0
Select Case control.ID
Case "aButton01": Size = Large Case "aButton02": Size = Small Case "aButton03": Size = Small ...........
[/vba] Надо как-то заставить эту функцию сработать не только при открытии, а при каждом нажатия на некоторые кнопки.
В порядке уточнение - пусть с кнопками связаны некие функции: [vba]
Код
Sub RunMacro(control As IRibbonControl) Select Case control.ID
Case "aButton01": Application.Run "Ribbon_A_01" Case "aButton02": Application.Run "Ribbon_A_02" ...............
[/vba]
Вот эти функции: [vba]
Код
Sub Ribbon_A_01 RMShiftMode = 2 End Sub Sub Ribbon_A_02() RMShiftMode = 3 End Sub
[/vba]
Правильно ли я понимаю, что надо как-то из функции Ribbon_A_01 вызвать функцию GetSize? И если это правильно, то как это сделать?
PS Видимо, аргумент "control" это и есть кнопка aButton01. Как же его задать, где получить ссылку на этот объект aButton01?
как минимум существует xlsb, не считая таких зубров на рынке сжатия как zip и rar. А так мой xlsm с интегрированной картинкой для кнопки весит всего 17 кило - см. выше
Цитата
Тип Xlsm
как минимум существует xlsb, не считая таких зубров на рынке сжатия как zip и rar. А так мой xlsm с интегрированной картинкой для кнопки весит всего 17 кило - см. вышеbuchlotnik
Сообщение отредактировал buchlotnik - Четверг, 30.11.2017, 21:59
Да мой файл раздут, потому что это шаблон, скачанный из сети, рассчитанный на десять групп по десять кнопок. Архивация не помогает, сжимается от 164 до 146 Кб.
Просмотрел Ваш файл - работает прекрасно, в принципе понятно, но ... не для такого ламера, как я.
Причина - у меня другие названия кнопок, другие обработчики. ---------------- Изучил Xml код, в принципе, понятно, что менять. Например, у Вас обработчик onAction: [vba]
Скажите, если я проделаю следующие действия: 1. поменяю расширение с XlsM на Zip 2. Открою архив и добавлю обработчик onLoad в голову файла customUI.xml 3. Упакую в Zip 4. Поменяю расширение с Zip на XlsM
Заработает?
Или надо добавлять обработчик onLoad как-то иначе?
Да мой файл раздут, потому что это шаблон, скачанный из сети, рассчитанный на десять групп по десять кнопок. Архивация не помогает, сжимается от 164 до 146 Кб.
Просмотрел Ваш файл - работает прекрасно, в принципе понятно, но ... не для такого ламера, как я.
Причина - у меня другие названия кнопок, другие обработчики. ---------------- Изучил Xml код, в принципе, понятно, что менять. Например, у Вас обработчик onAction: [vba]
Скажите, если я проделаю следующие действия: 1. поменяю расширение с XlsM на Zip 2. Открою архив и добавлю обработчик onLoad в голову файла customUI.xml 3. Упакую в Zip 4. Поменяю расширение с Zip на XlsM
Заработает?
Или надо добавлять обработчик onLoad как-то иначе?Эмкей
Молния не ударяет в долины? Ещё как ударяет!
Сообщение отредактировал Эмкей - Четверг, 30.11.2017, 23:18
, а обновите файл в архиве - верно? ( ). И я бы рекомендовал не ручками это творить, а в нормальных прогах - например, Ribbon XML Editor. И кстати, а зачем вам остальной зоопарк (getLabel, getImage, getScreentip, getVisible) - или задача у вас шире, чем описали?
Цитата
как-то иначе?
отчего же - вроде верно описали - только не
Цитата
Упакую в Zip
, а обновите файл в архиве - верно? ( ). И я бы рекомендовал не ручками это творить, а в нормальных прогах - например, Ribbon XML Editor. И кстати, а зачем вам остальной зоопарк (getLabel, getImage, getScreentip, getVisible) - или задача у вас шире, чем описали?buchlotnik
Ну да, у меня на данный момент три группы и 13 кнопок, и дальше будет больше.
так вот, не работает что-то. Не срабатывает onLoad Вот у Вас myribbon.Invalidate работает, обновляя размер кнопки, а у меня мой ribbonQ, которым я заменил Ваш myribbon имеет значение nothing, это я в дебуггере вижу
Ну да, у меня на данный момент три группы и 13 кнопок, и дальше будет больше.
так вот, не работает что-то. Не срабатывает onLoad Вот у Вас myribbon.Invalidate работает, обновляя размер кнопки, а у меня мой ribbonQ, которым я заменил Ваш myribbon имеет значение nothing, это я в дебуггере вижуЭмкей
да наплевать как названа переменная - она ж переменная. Прикладывайте сюда в текст сообщения код XML и код VBA - будем смотреть (про теги не забудьте # и желательно под спойлер убрать - кнопка spoile)
Цитата
мой ribbonQ
да наплевать как названа переменная - она ж переменная. Прикладывайте сюда в текст сообщения код XML и код VBA - будем смотреть (про теги не забудьте # и желательно под спойлер убрать - кнопка spoile)buchlotnik
Сообщение отредактировал buchlotnik - Четверг, 30.11.2017, 23:29
Option Explicit Dim ribbonQ As IRibbonUI Dim SizeOfQZSwap As Long Sub CustomUI_onLoad(ribbon As IRibbonUI) Set ribbonQ = ribbon SizeOfQZSwap = 1 End Sub Sub RibbonQ_Pressed() MsgBox "Pressed!" End Sub ................... Sub RunMacro(control As IRibbonControl)
Select Case control.ID
Case "cButton05": Do SizeOfQZSwap = 1 - SizeOfQZSwap Call RibbonQ_Pressed ribbonQ.Invalidate
Option Explicit Dim ribbonQ As IRibbonUI Dim SizeOfQZSwap As Long Sub CustomUI_onLoad(ribbon As IRibbonUI) Set ribbonQ = ribbon SizeOfQZSwap = 1 End Sub Sub RibbonQ_Pressed() MsgBox "Pressed!" End Sub ................... Sub RunMacro(control As IRibbonControl)
Select Case control.ID
Case "cButton05": Do SizeOfQZSwap = 1 - SizeOfQZSwap Call RibbonQ_Pressed ribbonQ.Invalidate
Суть дела я понял - надо обновить состояние ленты в целом, лента это та переменная ribbonQ, которую мы должны получить при загрузке файла через функцию onLoad, которую мы прописываем в XML-коде. Обновляется методом Invalidate.
И почему-то не удаётся снять переменную ribbonQ.
Суть дела я понял - надо обновить состояние ленты в целом, лента это та переменная ribbonQ, которую мы должны получить при загрузке файла через функцию onLoad, которую мы прописываем в XML-коде. Обновляется методом Invalidate.
И почему-то не удаётся снять переменную ribbonQ.Эмкей
Понял в чем дело - у Вас использован Dim, Вы можете себе это позволить, у Вас всё в одном модуле, а у меня в разных, и надо было сделать Public для переменных ribbonQ и SizeOfQZSwap !!!!!!
Отлично! Искренне благодарю!!!
Есть, сработало!!!
Понял в чем дело - у Вас использован Dim, Вы можете себе это позволить, у Вас всё в одном модуле, а у меня в разных, и надо было сделать Public для переменных ribbonQ и SizeOfQZSwap !!!!!!
Иконки для кнопок я беру из Галереи MS Office. Хотя иконок там множество, толку от них мало. Вопрос - как нарисовать и подгрузить собственный рисунок? Например, можно сделать первую кнопку в первой группе собственным логотипом
Вопрос вдогонку:
Иконки для кнопок я беру из Галереи MS Office. Хотя иконок там множество, толку от них мало. Вопрос - как нарисовать и подгрузить собственный рисунок? Например, можно сделать первую кнопку в первой группе собственным логотипом Эмкей
Эмкей, обратите внимание на п5s Правил форума. Размещать тему на разных форумах не запрещается, но нужно предупреждать об этом помогающих. В следующий раз сами скидывайте ссылки на кроссы.
Эмкей, обратите внимание на п5s Правил форума. Размещать тему на разных форумах не запрещается, но нужно предупреждать об этом помогающих. В следующий раз сами скидывайте ссылки на кроссы.Manyasha