Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > CommandBarButton.OnAction


Автор: Naghual 23.2.2005, 13:51
Здравствуйте уважаемые.

Циклом создается N кнопок на панели инструментов. Все они могут быть обработанны в одной процедуре, если знать какая кнопка была нажата.
Возможно ли передавать параметр в процедуру через свойство OnAction?

Очень не хочется делать N количество процедур! Это и грустно, и ограничивает возможности.

Автор: Jureth 24.2.2005, 06:26
Можно, например так:
Код
btn.OnAction="test(""string value"", number)"

соответственно описываем процедуру:
Код
sub test(s$, n%)
'...
end sub

Автор: Akina 24.2.2005, 09:48
Цитата(Naghual @ 23.2.2005, 14:51)
Циклом создается N кнопок на панели инструментов

Заранее создаем управляющий массив и юзаем его.

Автор: Naghual 24.2.2005, 10:17
Jureth, если бы все было так просто - я бы вопрос не задавал.
Дело в том, что как только процедура test требует для себя параметры, она перестает быть видимой как глобальный макрос Екселя, в следствии чего, ее нельзя использовать для OnAction.

Akina, я как раз от этого и хочу уйти!

Автор: Akina 24.2.2005, 10:29
Naghual
Если ты от этого пытаешься уйти, то зачем тогда ведешь речь о единой процедуре обработки? Либо ты имеешь кучу независимых кнопок - у каждой уникальное имя и набор процедур реакции на события, либо имеешь массив кнопок - с одним именем, набором процедур и управляющим массивом. Промежуточных вариантов нет. Нельзя быть немножко беременной... Но если уж тебе непременно конпки независимые, а процедура одна, то каждая индивидуальная процедура реакции на событие делает единственную вещь - вызов общей процедуры со специфичными для данной кнопки параметрами:

Код

Sub SomeKnob_OnAction(SomeParameter As SomeType)
Call Common_OnAction(SomeParameter, "SomeKnob")
End Sub

Sub AnotherKnob_OnAction(SomeParameter As SomeType)
Call Common_OnAction(SomeParameter, "AnotherKnob")
End Sub

Sub Common_OnAction(SomeParameter As SomeType, KnobName As String)
...
End Sub


PS. SomeKnob_OnAction может и не иметь параметров. Есссно. Это я к тому что как только процедура test требует для себя параметры, она перестает быть видимой как глобальный макрос Екселя - но по-любому каждому кнопу своя начальная процедура...

Автор: Naghual 24.2.2005, 11:02
Цитата
по-любому каждому кнопу своя начальная процедура...
Вот от этого и хотел уйти. Но так как
Цитата
Нельзя быть немножко беременной...
то наверное прийдется.
smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)