1

Тема: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Здравствуйте, создаю свою вкладку с помощью Ribbon XML Editor (спасибо Максиму, подскажите пожалуйста как написать эти кнопки со своими макросами?
Т.е. если я правильно понял:
- togglebutton: нажата - запускается "Макрос1", отпущена - запускается "Макрос2"
- кнопка "Границы и таблицы": выпадающий список с действиями, фиксирующийся на последнем выбраннном.

Post's attachments

Новый точечный рисунок.png
Новый точечный рисунок.png 6.88 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

2

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Для кнопки "Границы и таблицы" назначить свой макрос не получится. А для togglebutton смотрите пример в приложенном файле

Post's attachments

ribbontest.docm 17.11 Кб, 27 скачиваний с 2014-02-15 

You don't have the permssions to download the attachments of this post.
Лучше день потерять — потом за пять минут долететь!

3

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Спасибо за оперативность, понял. На togglebutton хотел повесить вкл/выкл подсветки полей из шаблона Бирюковича. Как можно сделать чтобы кнопка была нажата, если в свойствах включена подсветка и выключена если она отключена (смотрите приложенный файл)? По поводу кнопки "Границы и таблицы" сделал выбор через splitbutton её можно как-то зафиксировать на последнем выбранном элементе?

Post's attachments

Пример.docm 38.61 Кб, 6 скачиваний с 2014-02-15 

You don't have the permssions to download the attachments of this post.

4

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Sta1917 пишет:

Как можно сделать чтобы кнопка была нажата, если в свойствах включена подсветка и выключена если она отключена

вам нужна процедура на getPressed:

Sub getPressed(control As IRibbonControl, ByRef pressed)
        pressed = ActiveWindow.View.FieldShading = wdFieldShadingAlways
End Sub
Sta1917 пишет:

сделал выбор через splitbutton её можно как-то зафиксировать на последнем выбранном элементе?

Я тоже задавал себе такой вопрос, но ответа на него не нашёл.

Лучше день потерять — потом за пять минут долететь!

5

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Мне эта тема тоже интересна. Надеюсь автор темы выложит поправленный пример от viter.alex... Куда прикрутить процедуру на getPressed я не понял.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

6

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Александр Б. пишет:

Куда прикрутить процедуру на getPressed я не понял.

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

Лучше день потерять — потом за пять минут долететь!

7

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Сразу не дошло, что getPressed это атрибут в XML схеме. Надо дополнить существующую строку в XML редакторе:

<toggleButton id="toggleButton1" label="toggleButton" onAction="onAction" getPressed="getPressed"/>

Ну и вставить вышеприведенный макрос getPressed в модуль VBA.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

8

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Как все просто оказывается. Согласно Office 2010 Help Files TableBordersMenu является splitButton, если найдется решение дайте знать пожалуйста.

9

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Только сделать своё собственное меню, имитирующее работу встроенного элемента. Не самый простой вариант, скажу я вам.
Управлять поведением стандартных элементов нельзя

Лучше день потерять — потом за пять минут долететь!

10

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Sta1917 пишет:

сделал выбор через splitbutton её можно как-то зафиксировать на последнем выбранном элементе?

Я тут подумал, чем вам <control idMso="TableBordersMenu" /> не нравится. У меня она нормально работает...

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

11

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Спустя три года, я решил сделать себе упомянутую в этой теме кнопку. Но оказалось, что  если шаблон (файл dotm) поместить в папку STARTUP, которая находится по адресу %appdata%\Microsoft\Word\STARTUP, то возникает ошибка:

Run-time error '4248'
Данная команда недоступна, так как не открыт ни один документ.

Если шаблон за пределами папки STARTUP, то все в порядке. Пример шаблона прикрепил.

Post's attachments

STARTUP run -time error 4248.dotm 86.04 Кб, 5 скачиваний с 2017-09-28 

You don't have the permssions to download the attachments of this post.
Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

12

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Прошёл месяц и, возможно, ты решил проблему. Но напишу на всякий случай. Как и написано, ошибка возникает, если не открыт ни один документ. Значит, в логике взаимодействия с лентой нужно предусмотреть такую ситуацию: проверять Documents.Count

Лучше день потерять — потом за пять минут долететь!

13

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Нет, не решил. Использование Documents.Count это лучше чем ничего, но все же это всего лишь пропуск ошибки, и кнопка все равно не сохраняет свое состояние в Word 2007.

Кстати, обнаружил, что в Word 2013 все работает без ошибок даже без проверки на Documents.Count.

Мой шаблон/макросы для автоматической нумерации Word 2003, 2007, 2010 и т.д. (стили, названия, перекрестные ссылки, LISTNUM). Делюсь: http://vk.com/club_alex_bir

14

Re: Ribbon: как устроена toggle button и кнопка "Границы таблицы"

Это не пропуск ошибки. Ты в макросе обращаешься к ActiveWindow.View, а этот объект существует, только если есть открытые документы.

Лучше день потерять — потом за пять минут долететь!