Страницы: 1
RSS
Как программно "нажать" ToggleButton ?
 
Как можно из процедуры, находящейся в Modul1 программно "нажать/отжать" ToggleButton1, находящийся в UserForm1 без того, чтобы не начались выполнения процедур UserForm_Initialize() и ToggleButton1_Click(), находящихся в UserForm1 ?  
 
Строка UserForm.ToggleButton1.Value = True вызывает выполнение сначала одной, затем другой процедуры, а просто ToggleButton1.Value = True - не выполняется вообще....  
 
Заранее благодарен...
 
Зачем?
 
Кнопки в форме вызывают различные листы книги. Кроме того, на эти листы можно перейти простым выделением листа внизу.    
Я хотел, чтобы как в первомм, так и во втором случае кнопка с названием соответствующего листа оставалась в форме нажатой...  
(проблема программного определения , какой лист сейчас перед глазами уже решена)
 
{quote}{login=andre532}{date=16.04.2012 01:48}{thema=Как программно "нажать" ToggleButton ?}{post}без того, чтобы не начались выполнения процедур UserForm_Initialize() {/post}{/quote}А как Вы собираетесь работать с формой, если она ещё не инициализирована?
 
В том-то и дело, что она уже была инициализована, но строка UserForm.ToggleButton1.Value = True опять повторяет ее инициализацию...
 
Т.е. при открытии формы кнопки должны быть в определённом извне положении? Ну так при открытии формы и определяйте это положение - по значению ячеек, по значению публичных переменных, или читайте в реестре, ещё можно пару мест придумать...  
Или нужно другое?
 
Форма UserForm2 постоянно должна "висеть".  
Я хотел бы, чтобы при переключении листов на ней "шевелились" кнопки с названиями баз данных, расположенных на этих листах.  
Пытаюсь осуществить это таким образом: (AheadF2 -это номер базы, который определяет другая подпрограмма - по переключению листов)  
 
Public Sub PressButtonForm2(AheadF2)  
 
If AheadF2 = 2 Then UserForm2.ToggleButton1.Value = True Else UserForm2.ToggleButton1.Value = False  
If AheadF2 = 4 Then UserForm2.ToggleButton2.Value = True Else UserForm2.ToggleButton2.Value = False  
If AheadF2 = 5 Then UserForm2.ToggleButton3.Value = True Else UserForm2.ToggleButton3.Value = False  
и т.д.  
End Sub
 
А не проще радиокнопки (OptionButton) использовать?
 
Конечно проще... Но TuggleButton'ы у меня большие, с красивыми риунками и текстом... Можно, конечно, еще и CommandButton'ы использовать, но они не западают, а по виду базы, не всегда понятно, какая из баз перед вами (они похожие)...Правда, это видно внизу на корешке листа... но уж очень хочется сделать наглядно и красиво...  
 
И всё равно, для другой формы нужно будет решить аналогичную задачу - делать кнопки недоступными, в зависимости от того, какой из листов перед пользователем...
 
Вот малюсенький пример с р/кнопками. Работает в обе стороны: при активации листа и по клику на кнопку.
 
Добавил Toggle. Обратную связь сами по аналогии.
 
Сам файл.
 
Большое спасибо за пример! Он меня навел на разные полезные мысли... Например, я использовал With - теперь у меня форма инициализируется только один раз - это не очень здорово, но уже хорошо...  
Но можно ли сделать так, чтобы на моем примере (для ToggleButton) кнопки только зрительно нажимались, но не выполнялись действия, написанные в процедуре Click?    
(У меня там выполнется довольно много разных действий (в т.ч. отжатие остальных ToggleButton'ов), которые не должны выполняться при простом перелистывании листов...  
Может можно как-то использовать .ToggleButton1.KeyDown ???
 
Не совсем понимаю "только зрительно". Ну используйте тогда Label или рисунки...  
===  
"теперь у меня форма инициализируется только один раз - это не очень здорово"  
А нужно несколько?
 
{quote}{login=Юрий М}{date=16.04.2012 03:48}{thema=}{post}Не совсем понимаю "только зрительно". Ну используйте тогда Label или рисунки...  
post}{/quote}  
Т.е. вы предлагаете использовать рисунок той же кнопки, но в нажатом состоянии?  
По-моему это некрасиво получится... Я просто думал. что есть какой-то простой прием, который позволил бы перевести вид кнопки в нажатый вид без того, чтобы начали выполнятся команды написанные в процедуре Click'а (т.е. избежать Value) ...  
---  
Форма у меня инициализируется при открытии файла и висит до его зарытия. А тут получается, что она "переинициализируется" при каждом переходе с листа на лист...
 
Нажатие кнопки - это и есть Клик. Как без него нажать? Я предлагаю управлять отображением (видим/скрыт) рисунка. Разместите в одной позиции несколько рисунков и отображайте нужный, в зависимости от выбранного листа.    
А на вопрос, вынесенный в название темы, ответ Вы уже получили.
 
Спасибо за ваши советы и долготерпение.  
 
Если вам еще интересно, то я буду пробовать осуществить свою идею-фикс путем введения в тело процедуры Click переменной, которая разрешала/запрещала бы выполнение действий, записанных в процедуре в зависимости от того, нажимается ли кнопка или перелистываются страницы...
 
А как всё-таки написать код (в тело UserForm_Initialize() ??) , чтобы, если форма уже открыта, то повторно ее не инициализировать?
 
У меня (в моём примере) никакой повторной инициализации нет.
Страницы: 1
Читают тему
Наверх