Страницы: 1
RSS
Динамические объекты на форме VBA Excel
 
Для повышения отзывчивости и надежности рабочих файлов мне очень захотелось все изменения делать через форму, на которой динамически создаются объекты в зависимости от того, какое действие происходит.  
В Си понятно, как работать. Там вообще много чего понятно) Но стоит задача сделать при попытке изменения любой ячейки:  
"UserForm1.Show  
Dim a() as CommandButton  
<<<какие-то определения, объявления>>>  
if <<<какие-то условия>>> Then  
ReDim a(n) as CommandButton  
CommandButton a(i)=new CommandButton(UserForm1)  
<<<Какая-то обработка новой кнопки>>>  
<<<Привязка к кнопке функций>>>  
End if  
...  
"  
Нужны сигналы и слоты, как в QT. Такое в VBA есть? Или какая-то адекватная замена.
 
{quote}{login=The_Prist}{date=30.11.2010 05:06}{thema=}{post}Вы бы лучше не на примере С объясняли, а просто словами....{/post}{/quote}  
 
Нужно создать форму, которая генерируется в зависимости от того, какие изменения происходят с рабочим файлом. Захотел я в пятой колонке исправить шестую сверху ячейку, вылазит соответствующая форма со своими кнопками, со своими реакциями на кнопки и расположением объектов. Надо не создавать заранее 40 форм для каждого случая, а сгенерировать кодом нужную. Т.е. в теле программы создавать кнопки, окошки и прочее. Я не уверен, возможно ли это на ВБА. Но мои последние совершенствования в ВБА доказывают, что в ВБА есть очень даже неплохой набор инструментов. Но с динамическими объектами я еще не встречал. И в интернете не нашлось сразу нужной инфы. Потому, думаю, на форуме есть знающие люди.
 
{quote}{login=The_Prist}{date=30.11.2010 05:56}{thema=}{post}Т.к. надо будет отслеживать события - нужны классы. Т.е. Вы при инициализации формы создаете на форме нужное количество контролов(нужных), обработки на нажатия делаете заранее в классах.    
 
Во вложении пример - как-то делал для кого-то на форуме. В нем создаются TextBox-ы. Аналогично можно сделать для любых контролов.{/post}{/quote}  
Отличный пример! Все встало на свои места.  
 
А создавать  новые объекты на форме можно? Чтобы форма изначально была пустая. Можно, конечно, поиграть с видимостью объектов, а сначала создать с запасом, но хочется, чтобы кнопочек и окошек было без излишка.  
 
И как-то реально по клавише "энтер" изменять данные? А то сейчас клавиша энтер переводит фокус на следующий объект. А потери фокуса или подобного события я что-то не нашел... Событие Change не подходит.
 
{quote}{login=The_Prist}{date=01.12.2010 05:14}{thema=}{post}Для отслеживания нажатия Enter:  
KeyPress  
 
Private Sub oTglb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)  
   If KeyAscii = 13 Then msgbox "Нажали Enter"  
End Sub  
 
Для отслеживания потери фокуса - Exit  
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)  
MsgBox "Вышли из объекта TextBox1"  
End Sub{/post}{/quote}  
 
Огромное спасибо, о Гуру VBA и Excel'я :)
 
А как сделать для отслеживания "MouseOut" ? :-)MouseMove не совсем подходит... Можно сказать совсем не подходит :-)
 
{quote}{login=The_Prist}{date=01.12.2010 05:14}{thema=}{post}Для отслеживания нажатия Enter:  
...{/post}{/quote}  
Похоже, энтер не обрабатывается. После нажатия даже не заходит в обработку события keypress...  
А внутри класса, почему-то нет события Exit...  
 
Сделал по событию кейдаун:  
Private Sub oTxtBx_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)  
If KeyCode = 13 Then  
   MsgBox "нажали Enter"  
End If  
End Sub  
 
Еще раз спасибо. Понимание и знание приемов повысилось)
Страницы: 1
Читают тему
Наверх