Вопрос № 147542: Коллеги. Необходима помощь по настройке списка закладок в пользовательском меню по положению их в тексте документа. Итак, есть свой пункт меню (код ниже) для Word 2003, который содержит вложенное меню со списком команд. Первая команда предназначен...
Вопрос № 147.542
Коллеги. Необходима помощь по настройке списка закладок в пользовательском меню по положению их в тексте документа. Итак, есть свой пункт меню (код ниже) для Word 2003, который содержит вложенное меню со списком команд. Первая команда предназначена для сортировки. Вторая и последующая команды представляют собой список имен закладок (имеющихся в документе). Эти закладки по умолчанию отсортированы по алфавиту.
Задача: по клику на команде "Сортировать по положению" список закладок в меню обновляется
в соответствии с их размещением в тексте документа. У команды появляется флажок (иконка), показывающая пользователю, что установлена эта сортировка. Повторный клик на команде восстанавливает сортировку по алфавиту и убирает иконку.
Для того, чтобы получить список по положению, нужно заменить оператор "For Each bm In ActiveDocument.Bookmarks" на "For Each bm In ActiveDocument.Range.Bookmarks". Но вот как это организовать в коде по вызову
команды OnAction - я не могу сообразить. Что именно написать в вызываемой по OnAction процедуре? Как реализовать такую сортировку по выбору команды меню? Подскажите пожалуйста. Спасибо за помощь.
Отвечает: Alec Perle
Здравствуйте, Кокин Антон Вадимович! Вам необходимо объявить переменную для хранения выбранного пользователем способа сортировки (напр. BookmarkOnRange As boolean) Для замены порядка следования команд меню необходимо его перерисовать, а в коде прорисовки использовать значение этой переменной. В Вашем случае можно для выбора коллекции в зависимости от виде сортировки воспользоваться оператором Iif. Для обработки команды меню каждой команде устанавливается свойство OnAction, которое содержит название
процедуры, выполняемой при нажатии пункта меню. Процедура для изменения типа меню должна менять значение переменной BookmarkOnRange и вызывать создание меню заново.
Приложение:
Ответ отправил: Alec Perle (статус: Студент)
Ответ отправлен: 18.10.2008, 15:26 Оценка за ответ: 5 Комментарий оценки: Alec, огромное спасибо за помощь. Попробую реализовать, просто реальный код макроса сложнее и меню у меня вложенные.
Спасибо.