1

Тема: Активация кнопки на Ribbon

Приветствую всех,

Коллеги, прибываю в тупике по следующему вопросу:
Как сделать активной или не активной кнопку на ленте (ribbon) в случае выделения таблицы. Другими словами, кнопка должна активироваться только при попадании курсора в таблицу.
Спасибо,

"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

2

Re: Активация кнопки на Ribbon

AlexStar пишет:

Приветствую всех,

Коллеги, прибываю в тупике по следующему вопросу:
Как сделать активной или не активной кнопку на ленте (ribbon) в случае выделения таблицы. Другими словами, кнопка должна активироваться только при попадании курсора в таблицу.
Спасибо,

Для начала вам нужно обеспечить срабатывание VBA-обработчика события WindowSelectionChange. Это можно сделать в следующей последовательности:
1. Создать модуль класса ThisApplication в проекте Normal. В этом модуле объявить публичную переменную oApp

Public WithEvents oApp As Word.Application


2. В этом же модуле класса создайте подпрограмму с именем oApp_WindowSelectionChange и обработкой вашего события

Private Sub oApp_WindowSelectionChange(ByVal sel As Selection)
If Selection.Tables.Count > 0 Then
   'Находимся внутри таблицы - обрабатываем событие
   '...
End If
End Sub

3. В модуле NewMacros объявите на уровне модуля создание экземпляра объекта oAppClass (типа ThisApplication) и в подпрограмме AutoExec свяжите его с объектом Application:

Dim oAppClass As New ThisApplication

Public Sub AutoExec()

   Set oAppClass.oApp = Word.Application

End Sub

Тогда при старте Word будет создаваться обработчик события WindowSelectionChange. Добившись этого, переходить к созданию кода изменения режима отображения командной кнопки на Ribbon (ленте инструментов Word).

3

Re: Активация кнопки на Ribbon

Спасибо огромное, на данном примере все получилось.

"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

4

Re: Активация кнопки на Ribbon

AlexStar пишет:

Спасибо огромное, на данном примере все получилось.

Что касается динамического изменения свойств элементов управления на ленте, то хорошие примеры (правда, для Excel, но для Word все делается точно так же) разобраны на сайте Рон де Брюина внешняя ссылка

5

Re: Активация кнопки на Ribbon

Приветствую всех.
Как то разобрался с активацией кнопки на ленте (Ribbon) в случае перемещения курсора в таблицу. Надо сказать, что крайне сложно отследить пошагово что происходит. Переменная Rib теряет значение после сохранения кода и после нажатия кнопочки «стоп» в отладчике, поэтому необходимо перезагружать файл с макросом каждый раз. И так, в приложении тестовый файлик который создает закладку, панель и кнопку. В случае активации таблицы кнопка активируется, при выходе из таблицы, кнопка становится не активной.
Если есть возможность гуру проверить насколько это все, верно, буду премного благодарен.
Спасибо,

Post's attachments

Test2.dotm 29.02 Кб, 1 скачиваний с 2017-07-18 

You don't have the permssions to download the attachments of this post.
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"

6

Re: Активация кнопки на Ribbon

AlexStar пишет:

...
Переменная Rib теряет значение после сохранения кода и после нажатия кнопочки «стоп» в отладчике, поэтому необходимо перезагружать файл с макросом каждый раз. И так, в приложении тестовый файлик который создает закладку, панель и кнопку. В случае активации таблицы кнопка активируется, при выходе из таблицы, кнопка становится не активной.
...

К сожалению, у меня проверить ваш пример не получается из-за собственных подпрограмм перехвата событий, связанных с Ribbon'ом. Но я слышал, что проблему "потери" связи с Ribbon'ом решить можно. Вот, пжл, посмотрите на сайте того же Рон де Брюина, который предлагает пример, основанный на идее другого эксперта.
внешняя ссылка

7

Re: Активация кнопки на Ribbon

yshindin пишет:

...
Вот, пжл, посмотрите на сайте того же Рон де Брюина, который предлагает пример, основанный на идее другого эксперта.
внешняя ссылка
...

Но его идею надо попытаться переработать: сохранять после развертывания ленты значение публичного указателя на ленту не в ячейке (как в случае Excel), а напр., в переменной Word (DOCVARIABLE) или в другом подходящем месте (скажем, ini-файле) и восстанавливать по необходимости (при этом надо понять, обнуляется ли указатель после сбоя макроса, и если обнуляется, то восстанавливать его значение из копии). Сам я не пробовал, возможно, у вас получится.

8

Re: Активация кнопки на Ribbon

Приветствую коллеги,

Благодаря советам и ссылкам на темы по данному вопросу, представляю вам работающий код активации кнопки при попадании курсора в таблицу. В силу того, что имеется проблема потери значения переменной, которая необходима для пользовательского интерфейса (Rib), реализована возможность сохранения указателя и в случае потери данных, и восстановление их из заранее сохраненной переменной  (DOCVARIABLE).

Для того, что бы код работал необходимо его поместить в папку Startup (для word) или подцепить макрос через: File-Options-AddIns, выбрать-templates, добавить… (если вы просто откроете файл, то ничего работать не будет)

В основном меню появиться закладка Test с двумя кнопками. Левая кнопка является индикатором (включилась/выключилась) при переводе курсора в таблицу.
Правая кнопка принудительно удаляет содержимое объекта: set rib = nothing.

После перевода курсора в таблицу программа загружает данные в rib по ссылке, которая сохранена в переменной  DOCVARIABLE

Как-то так, если где попутал термины, ну как умеем, так и глаголем.

Post's attachments

Test2.dotm 32.92 Кб, 1 скачиваний с 2017-07-19 

You don't have the permssions to download the attachments of this post.
"Ты не умничай, ты пальцем покажи"
"Кто поработал с многоуровневым списком в Ворде, тот в цирке не смеется"