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

Вход

Регистрация

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

 

= Мир MS Excel/Настройка интерфейса Ribbon в процессе выполнения действий - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Настройка интерфейса Ribbon в процессе выполнения действий (Макросы/Sub)
Настройка интерфейса Ribbon в процессе выполнения действий
Эмкей Дата: Четверг, 30.11.2017, 14:01 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте!
У меня проблема совсем простая, во всяком случае, с виду представляется простой.
Создаю 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]


Молния не ударяет в долины? Ещё как ударяет!

Сообщение отредактировал Эмкей - Четверг, 30.11.2017, 19:11
 
Ответить
СообщениеЗдравствуйте!
У меня проблема совсем простая, во всяком случае, с виду представляется простой.
Создаю 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]

Автор - Эмкей
Дата добавления - 30.11.2017 в 14:01
_Boroda_ Дата: Четверг, 30.11.2017, 14:53 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
- Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Прочитайте Правила форума
- Оформите код тегами (в режиме правки поста выделите код и нажмите кнопку #, пояснялка здесь)

Автор - _Boroda_
Дата добавления - 30.11.2017 в 14:53
Эмкей Дата: Четверг, 30.11.2017, 19:22 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Благодарю за подсказку!
Исправил, что мог.

Файл прикладывать не стал, потому как вопрос достаточно общий, как мне кажется.


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеБлагодарю за подсказку!
Исправил, что мог.

Файл прикладывать не стал, потому как вопрос достаточно общий, как мне кажется.

Автор - Эмкей
Дата добавления - 30.11.2017 в 19:22
buchlotnik Дата: Четверг, 30.11.2017, 20:12 | Сообщение № 4
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
вопрос достаточно общий
Цитата
представляется простой
Цитата
Файл прикладывать не стал
ну-ну, перерисовка ленты на лету... и без файла - удачи yes

хотя чего я вредничаю - см. файл - он достаточно общий и представляется простой, так что комментарии излишни
К сообщению приложен файл: Button_Get_Size.xlsm (17.4 Kb)


Сообщение отредактировал buchlotnik - Четверг, 30.11.2017, 21:47
 
Ответить
Сообщение
Цитата
вопрос достаточно общий
Цитата
представляется простой
Цитата
Файл прикладывать не стал
ну-ну, перерисовка ленты на лету... и без файла - удачи yes

хотя чего я вредничаю - см. файл - он достаточно общий и представляется простой, так что комментарии излишни

Автор - buchlotnik
Дата добавления - 30.11.2017 в 20:12
Эмкей Дата: Четверг, 30.11.2017, 21:56 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Не получается приложить файл:
1. Размер более 100 Кб
2. Тип Xlsm.


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеНе получается приложить файл:
1. Размер более 100 Кб
2. Тип Xlsm.

Автор - Эмкей
Дата добавления - 30.11.2017 в 21:56
buchlotnik Дата: Четверг, 30.11.2017, 21:58 | Сообщение № 6
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Тип Xlsm
как минимум существует xlsb, не считая таких зубров на рынке сжатия как zip и rar. А так мой xlsm с интегрированной картинкой для кнопки весит всего 17 кило - см. выше


Сообщение отредактировал buchlotnik - Четверг, 30.11.2017, 21:59
 
Ответить
Сообщение
Цитата
Тип Xlsm
как минимум существует xlsb, не считая таких зубров на рынке сжатия как zip и rar. А так мой xlsm с интегрированной картинкой для кнопки весит всего 17 кило - см. выше

Автор - buchlotnik
Дата добавления - 30.11.2017 в 21:58
Эмкей Дата: Четверг, 30.11.2017, 22:53 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Да мой файл раздут, потому что это шаблон, скачанный из сети, рассчитанный на десять групп по десять кнопок.
Архивация не помогает, сжимается от 164 до 146 Кб.

Просмотрел Ваш файл - работает прекрасно, в принципе понятно, но ... не для такого ламера, как я.

Причина - у меня другие названия кнопок, другие обработчики.
----------------
Изучил Xml код, в принципе, понятно, что менять.
Например, у Вас обработчик onAction:
[vba]
Код
<button id="btn1" label="MyButton" image="btn01" getSize="btn01_getSize" onAction="btn01_click"/>
[/vba]
у меня:
[vba]
Код
<button id="aButton01" getLabel="GetLabel" onAction="RunMacro"  getImage="GetImage" getSize="GetSize" getScreentip = "GetScreentip" getVisible = "GetVisible"/>
[/vba]

Это я все поменяю в модуле.
Но у меня, оказывается, нет обработчика onLoad, в отличие от Вашего примера.
У Вас:
[vba]
Код
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="CustomUI_onLoad">
[/vba]
У меня:
[vba]
Код
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
[/vba]

Скажите, если я проделаю следующие действия:
1. поменяю расширение с XlsM на Zip
2. Открою архив и добавлю обработчик onLoad в голову файла customUI.xml
3. Упакую в Zip
4. Поменяю расширение с Zip на XlsM

Заработает?

Или надо добавлять обработчик onLoad как-то иначе?


Молния не ударяет в долины? Ещё как ударяет!

Сообщение отредактировал Эмкей - Четверг, 30.11.2017, 23:18
 
Ответить
СообщениеДа мой файл раздут, потому что это шаблон, скачанный из сети, рассчитанный на десять групп по десять кнопок.
Архивация не помогает, сжимается от 164 до 146 Кб.

Просмотрел Ваш файл - работает прекрасно, в принципе понятно, но ... не для такого ламера, как я.

Причина - у меня другие названия кнопок, другие обработчики.
----------------
Изучил Xml код, в принципе, понятно, что менять.
Например, у Вас обработчик onAction:
[vba]
Код
<button id="btn1" label="MyButton" image="btn01" getSize="btn01_getSize" onAction="btn01_click"/>
[/vba]
у меня:
[vba]
Код
<button id="aButton01" getLabel="GetLabel" onAction="RunMacro"  getImage="GetImage" getSize="GetSize" getScreentip = "GetScreentip" getVisible = "GetVisible"/>
[/vba]

Это я все поменяю в модуле.
Но у меня, оказывается, нет обработчика onLoad, в отличие от Вашего примера.
У Вас:
[vba]
Код
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="CustomUI_onLoad">
[/vba]
У меня:
[vba]
Код
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
[/vba]

Скажите, если я проделаю следующие действия:
1. поменяю расширение с XlsM на Zip
2. Открою архив и добавлю обработчик onLoad в голову файла customUI.xml
3. Упакую в Zip
4. Поменяю расширение с Zip на XlsM

Заработает?

Или надо добавлять обработчик onLoad как-то иначе?

Автор - Эмкей
Дата добавления - 30.11.2017 в 22:53
buchlotnik Дата: Четверг, 30.11.2017, 23:02 | Сообщение № 8
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
как-то иначе?
отчего же - вроде верно описали - только не
Цитата
Упакую в Zip
, а обновите файл в архиве - верно? ( yes ). И я бы рекомендовал не ручками это творить, а в нормальных прогах - например, Ribbon XML Editor. И кстати, а зачем вам остальной зоопарк (getLabel, getImage, getScreentip, getVisible) - или задача у вас шире, чем описали?
 
Ответить
Сообщение
Цитата
как-то иначе?
отчего же - вроде верно описали - только не
Цитата
Упакую в Zip
, а обновите файл в архиве - верно? ( yes ). И я бы рекомендовал не ручками это творить, а в нормальных прогах - например, Ribbon XML Editor. И кстати, а зачем вам остальной зоопарк (getLabel, getImage, getScreentip, getVisible) - или задача у вас шире, чем описали?

Автор - buchlotnik
Дата добавления - 30.11.2017 в 23:02
Эмкей Дата: Четверг, 30.11.2017, 23:21 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Ну да, у меня на данный момент три группы и 13 кнопок, и дальше будет больше.

так вот, не работает что-то.
Не срабатывает onLoad
Вот у Вас
myribbon.Invalidate
работает, обновляя размер кнопки, а у меня
мой ribbonQ, которым я заменил Ваш myribbon имеет значение nothing, это я в дебуггере вижу


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеНу да, у меня на данный момент три группы и 13 кнопок, и дальше будет больше.

так вот, не работает что-то.
Не срабатывает onLoad
Вот у Вас
myribbon.Invalidate
работает, обновляя размер кнопки, а у меня
мой ribbonQ, которым я заменил Ваш myribbon имеет значение nothing, это я в дебуггере вижу

Автор - Эмкей
Дата добавления - 30.11.2017 в 23:21
buchlotnik Дата: Четверг, 30.11.2017, 23:29 | Сообщение № 10
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
мой ribbonQ
да наплевать как названа переменная - она ж переменная. Прикладывайте сюда в текст сообщения код XML и код VBA - будем смотреть (про теги не забудьте # и желательно под спойлер убрать - кнопка spoile)


Сообщение отредактировал buchlotnik - Четверг, 30.11.2017, 23:29
 
Ответить
Сообщение
Цитата
мой ribbonQ
да наплевать как названа переменная - она ж переменная. Прикладывайте сюда в текст сообщения код XML и код VBA - будем смотреть (про теги не забудьте # и желательно под спойлер убрать - кнопка spoile)

Автор - buchlotnik
Дата добавления - 30.11.2017 в 23:29
Эмкей Дата: Четверг, 30.11.2017, 23:37 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Вот код VBA


Вот код xml


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеВот код VBA


Вот код xml

Автор - Эмкей
Дата добавления - 30.11.2017 в 23:37
Эмкей Дата: Четверг, 30.11.2017, 23:38 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
И почему-то переменная SizeOfQZSwap не инициализируется вообще - в дебуггере показывает значение Empty, хотя тип Long
Ну да ладно, это пустяк ...


Молния не ударяет в долины? Ещё как ударяет!

Сообщение отредактировал Эмкей - Четверг, 30.11.2017, 23:39
 
Ответить
СообщениеИ почему-то переменная SizeOfQZSwap не инициализируется вообще - в дебуггере показывает значение Empty, хотя тип Long
Ну да ладно, это пустяк ...

Автор - Эмкей
Дата добавления - 30.11.2017 в 23:38
Эмкей Дата: Четверг, 30.11.2017, 23:43 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Суть дела я понял - надо обновить состояние ленты в целом, лента это та переменная ribbonQ, которую мы должны получить при загрузке файла через функцию onLoad, которую мы прописываем в XML-коде.
Обновляется методом Invalidate.

И почему-то не удаётся снять переменную ribbonQ.


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеСуть дела я понял - надо обновить состояние ленты в целом, лента это та переменная ribbonQ, которую мы должны получить при загрузке файла через функцию onLoad, которую мы прописываем в XML-коде.
Обновляется методом Invalidate.

И почему-то не удаётся снять переменную ribbonQ.

Автор - Эмкей
Дата добавления - 30.11.2017 в 23:43
Эмкей Дата: Четверг, 30.11.2017, 23:46 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Есть, сработало!!!

Понял в чем дело - у Вас использован Dim, Вы можете себе это позволить, у Вас всё в одном модуле, а у меня в разных, и надо было сделать Public для переменных ribbonQ и SizeOfQZSwap
!!!!!!

Отлично!
Искренне благодарю!!!


Молния не ударяет в долины? Ещё как ударяет!

Сообщение отредактировал Эмкей - Четверг, 30.11.2017, 23:47
 
Ответить
СообщениеЕсть, сработало!!!

Понял в чем дело - у Вас использован Dim, Вы можете себе это позволить, у Вас всё в одном модуле, а у меня в разных, и надо было сделать Public для переменных ribbonQ и SizeOfQZSwap
!!!!!!

Отлично!
Искренне благодарю!!!

Автор - Эмкей
Дата добавления - 30.11.2017 в 23:46
Эмкей Дата: Пятница, 01.12.2017, 00:26 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Вопрос вдогонку:

Иконки для кнопок я беру из Галереи MS Office.
Хотя иконок там множество, толку от них мало.
Вопрос - как нарисовать и подгрузить собственный рисунок?
Например, можно сделать первую кнопку в первой группе собственным логотипом :)


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеВопрос вдогонку:

Иконки для кнопок я беру из Галереи MS Office.
Хотя иконок там множество, толку от них мало.
Вопрос - как нарисовать и подгрузить собственный рисунок?
Например, можно сделать первую кнопку в первой группе собственным логотипом :)

Автор - Эмкей
Дата добавления - 01.12.2017 в 00:26
buchlotnik Дата: Пятница, 01.12.2017, 00:32 | Сообщение № 16
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Цитата
Вопрос вдогонку:
Эмкей, прочитайте Правила форума, это полезно
[p.s.]хотя ответ содержится в посте №8, но вы мой совет решили проигнорировать
 
Ответить
Сообщение
Цитата
Вопрос вдогонку:
Эмкей, прочитайте Правила форума, это полезно
[p.s.]хотя ответ содержится в посте №8, но вы мой совет решили проигнорировать

Автор - buchlotnik
Дата добавления - 01.12.2017 в 00:32
Эмкей Дата: Пятница, 01.12.2017, 00:36 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Понял Вас, buchlotnik.
Буду пользоваться Эдитором!


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
СообщениеПонял Вас, buchlotnik.
Буду пользоваться Эдитором!

Автор - Эмкей
Дата добавления - 01.12.2017 в 00:36
buchlotnik Дата: Суббота, 02.12.2017, 00:13 | Сообщение № 18
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
а какзачок-то засланый - лады, запомним
 
Ответить
Сообщениеа какзачок-то засланый - лады, запомним

Автор - buchlotnik
Дата добавления - 02.12.2017 в 00:13
Эмкей Дата: Воскресенье, 03.12.2017, 11:49 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
buchlotnik, здравствуйте!
Ещё раз хочу поблагодарить Вас за помощь!

Задавал свой вопрос на разных форумах, ответ нашёл только здесь, у Вас.


Молния не ударяет в долины? Ещё как ударяет!
 
Ответить
Сообщениеbuchlotnik, здравствуйте!
Ещё раз хочу поблагодарить Вас за помощь!

Задавал свой вопрос на разных форумах, ответ нашёл только здесь, у Вас.

Автор - Эмкей
Дата добавления - 03.12.2017 в 11:49
Manyasha Дата: Воскресенье, 03.12.2017, 14:22 | Сообщение № 20
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Эмкей, обратите внимание на п5s Правил форума.
Размещать тему на разных форумах не запрещается, но нужно предупреждать об этом помогающих.
В следующий раз сами скидывайте ссылки на кроссы.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеЭмкей, обратите внимание на п5s Правил форума.
Размещать тему на разных форумах не запрещается, но нужно предупреждать об этом помогающих.
В следующий раз сами скидывайте ссылки на кроссы.

Автор - Manyasha
Дата добавления - 03.12.2017 в 14:22
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Настройка интерфейса Ribbon в процессе выполнения действий (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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