Как сделать несколько кнопок с одной процедурой?

Программирование на Visual Basic for Applications
Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Как сделать несколько кнопок с одной процедурой?

Сообщение Чудовище под кроватью » 17.01.2007 (Ср) 10:28

Программно создаю ToolBar с кнопками. Как сделать, чтобы при нажатии на кнопку, запускалась процедура с параметром (в данном случае .Caption этой кнопки)?
Как сделать то же самое для формы, я знаю, а тут что-то не соображу.
Делаю такой код:
Код: Выделить всё
Sub AddVisibilityToolBar()
    Dim msBtn As CommandBarButton
    Dim wsList As Worksheet

'пересоздаем тулбар
    On Error Resume Next
    Application.CommandBars("VisibilityToolBar").Delete
    On Error GoTo 0
    Application.CommandBars.Add(Name:="VisibilityToolBar").Visible = True

    With Application.CommandBars("VisibilityToolBar")
        .Position = msoBarLeft
'заполняем тулбар кнопками с названиями листов
        For Each wsList In Worksheets
            With .Controls
                Set msBtn = .Add(Type:=msoControlButton)
                With msBtn
                    .Caption = wsList.Name
                    .Style = msoButtonWrapCaption
'если лист виден, кнопка нажата и наоборот.
                    .State = wsList.Visible
                End With
            End With
        Next wsList
    End With

End Sub

В итоге слева должна получиться панель с переключением видимости листов (вкл/выкл). Только вот не соображу, как мне тут в OnAction записать вызов процедуры с параметром.
Последний раз редактировалось Чудовище под кроватью 17.01.2007 (Ср) 10:52, всего редактировалось 2 раз(а).
У-у-у!!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.01.2007 (Ср) 10:44

что-нить в этом духе если MyMacro находится в стандартном модуле:

Код: Выделить всё
With CommandBars("MyBar").Controls("MyControl")
     .OnAction = "'MyMacro """ & .Caption & """'"
End With


или если MyMacro находится в модуле класса:

Код: Выделить всё
With CommandBars("MyBar").Controls("MyControl")
     .OnAction = "'MyModule.MyMacro """ & .Caption & """'"
End With
Привет,
KL

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 17.01.2007 (Ср) 11:01

KL писал(а):что-нить в этом духе если MyMacro находится в стандартном модуле.

Макрос находится в том же модуле, но приведенный код не сработал. :(
У-у-у!!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.01.2007 (Ср) 15:51

Чудовище под кроватью писал(а):
KL писал(а):что-нить в этом духе если MyMacro находится в стандартном модуле.

Макрос находится в том же модуле, но приведенный код не сработал. :(


1) "в том же модуле..." что и...Я идиот! Убейте меня, кто-нибудь!
2) "в том же модуле" в данном сл. никакой роли не играет, важно только модуль класса или стандартный
3) "приведенный код..." - приведено две инструкции, в которых нужно было заменить все имена начин. на "My" на реальные
- речь идет об обеих инструкциях?
- были ли произведены замены
- не были ли уничтожены апострофы (') при копировании кода?
- используемый CommandBar принадлежит объекту Application или Workbook?
4) "...не сработал..." - а в чем это выразилось?
Привет,
KL

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 17.01.2007 (Ср) 20:27

Модуль стандартный.
Вместо вызова процедуры MyMacro с параметром .Caption он пытается вызвать процедуру с названием "MyMacro"&.Caption, которого, разумеется, не находит.
У-у-у!!

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 17.01.2007 (Ср) 22:46

А по-моему все работает (Excel 2003) - см приложение.
Вложения
Book1.xls
(29 Кб) Скачиваний: 59
Привет,
KL

Чудовище под кроватью
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 27.11.2006 (Пн) 14:46
Откуда: А из ника не ясно?

Сообщение Чудовище под кроватью » 18.01.2007 (Чт) 7:01

KL писал(а):А по-моему все работает (Excel 2003) - см приложение.

Да, работает! Спасибо!!! :D
У-у-у!!


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

    TopList