Кнопка надстройки

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
User2
Сообщения: 2
Зарегистрирован: 06 июн 2009, 13:36

В MS Excel 2003 была добавлена надстройка, после чего появился тулбар класса MsoCommandBar с четырьмя кнопками. Нужно как-нибудь добиться одной из следующих вещей:
1) При открытии книги автоматически нажать третью слева кнопку (указал какую на случай если будет как-нибудь использован индекс).

Или
2) Назначить клавишу/сочетание клавиш для этой кнопки

Или
3) При открытии книги получить и сохранить в текстовый файл handle именно этой кнопки (Пробовал искать через Window Scanner, но нашел только handle всего тулбара)

Пожалуйста, по возможности постарайтесь ответить в течении суток.
Аватара пользователя
EducatedFool
Сообщения: 197
Зарегистрирован: 06 апр 2008, 14:03
Откуда: Россия, Урал
Контактная информация:

Код: Выделить всё

Private Sub [B]Workbook_Open[/B]()
    Dim НужнаяКнопка As CommandBarButton
    Set НужнаяКнопка = Application.CommandBars(1).Controls(Application.CommandBars(1).Controls.Count - 2) ' третья [B]справа[/B]
   [B] Set НужнаяКнопка = Application.CommandBars(1).Controls(3)[/B] ' третья [B]слева[/B]

    Application.[B]OnKey[/B] "^t", НужнаяКнопка.OnAction    ' назначаем кнопке комбинацию Ctrl + T

    НужнаяКнопка.[B]Execute[/B]    ' нажимаем на кнопку
End Sub
Моя надстройка (на которой я проверял код) создаёт кнопки в главном меню - CommandBars(1) (там где Файл, Правка, и т.д.)

Замените в коде CommandBars(1) на CommandBars(НомерВашейПанелиИнструментов)
или на CommandBars("ИмяВашейПанелиИнструментов")

(добавлено)
Если код расположен в модуле книги, то он работает только в таком виде:
(поскольку у объекта Workbook тоже есть свойство CommandBars)

Код: Выделить всё

Private Sub [B]Workbook_Open[/B]()
    Dim НужнаяКнопка As CommandBarButton
    Set НужнаяКнопка = [B][color="Red"]Application.[/color][/B]CommandBars(1).Controls(3)  ' третья слева

    Application.OnKey "^t", НужнаяКнопка.OnAction    ' назначаем кнопке комбинацию Ctrl + T
    НужнаяКнопка.Execute    ' нажимаем на кнопку
End Sub
А если код выполняется из модуля листа, или из стандартного модуля,
то всё работает и без Application...
Макросы для Excel, Word, CorelDRAW. Быстро, профессионально, недорого. http://ExcelVBA.ru/

Благодарности принимаются на кошелёк WebMoney: R318574877619 и Яндекс.Деньги: 41001335672216
User2
Сообщения: 2
Зарегистрирован: 06 июн 2009, 13:36

Спасибо большое за ответ! Помогло.
Ответить