Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическая форма на Vba: элементы и события

405
17 декабря 2004 года
Dmitrii
554 / / 16.12.2004
Прошу помочь в создании динамической формы.
Инструмент разработки - VBA для Excel 2000.

Исходная ситуация: в проекте есть пустая форма (модуль кода тоже пуст).

Надо: при загрузке добавить на нее нужное кол-во элементов управления (в моем случае CheckBox) и код обработки события Click для каждого из них.

Никак не могу связать между собой элементы и коды их реакции на событие.

Если добавлять в модуль кода формы текст из файла или строки (методы AddFromFile или InsertLines соответственно), то все добавляется благополучно. Только вот на событие "коробочки" не реагируют, как будто для них кода и не существует.
Реагирует только сама форма, хотя код события ее инициализации вставлен тем же способом, что и для "коробочек".

Если же добавлять код обработки события после предварительного использования метода CreateEventProc("Click", "CheckBox1"), то возникает сообщение об ошибке "57017: Event handler is invalid".
Пробовал добавлять код события этим же способом прямо после добавления элемента на форму при ее инициализации. Результат - ошибка 57017.

Пробовал создавать один элемент в режиме конструирования, а потом копировать его в нужном количестве и вставлять из файла или регистрировать методом CreateEventProc (для копий) код обработки события.
В первом случае - опять нет реакции. Во втором - та же ошибка.

Подскажите, пожалуйста, что делать-то.
2.0K
21 декабря 2004 года
Meh&VB
28 / / 20.03.2003
Единственное , что могу посоветовать - создать класс, наделённый всеми свойствами нужного элемента,а потом динамически создавать элементы этого класса и помещать на форму
258
22 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
Вот обсуждение данного вопроса. И там дан работающий код:
http://forum.codenet.ru/showthread.php?s=&threadid=13037&highlight=VBide
405
22 декабря 2004 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by SergeySV
Вот обсуждение данного вопроса. И там дан работающий код:
http://forum.codenet.ru/showthread.php?s=&threadid=13037&highlight=VBide



Спасибо всем за внимание к моему вопросу.
С модулем класса попробую. Вероятно, ничего другого уже и не остается, т.к. материалы, находящиеся по предложенной ссылке (увы) не помогли. Эффект тот же - объект управления создается, а на код обработки события для него не реагирует.

258
22 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
У меня OfficeXp код отработал нормально

Private Sub CommandButton1_Click()
Workbooks.Add
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=164.25, Top:=27, Width:=45, Height:= _
41.25).Select
n = Application.VBE.VBProjects.Count
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 2, "Private Sub CommandButton1_Click()"
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "MsgBox ""Hello from new book!"""
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 4, "End Sub"
End Sub

Потом в этой новой книги можно было скоко угодно нажимать на кнопку и без всяких ошибок появлялся MsgBox

Так что если у тебя проблемы, то дело скорей всего в каких то настройках твоего офиса и смена кода тебе не поможет, потому что дело не в нем. Да и вообще, я бы не оставлял без внимания тот факт, что работающий у всех код, на каком то одном компьютере не работает. Если уж не разобрался бы в причинах, то по крайне мере снес бы office и поставил его заново
405
23 декабря 2004 года
Dmitrii
554 / / 16.12.2004
Цитата:
Originally posted by SergeySV
У меня OfficeXp код отработал нормально

Private Sub CommandButton1_Click()
Workbooks.Add
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=164.25, Top:=27, Width:=45, Height:= _
41.25).Select
n = Application.VBE.VBProjects.Count
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 2, "Private Sub CommandButton1_Click()"
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "MsgBox ""Hello from new book!"""
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 4, "End Sub"
End Sub

Потом в этой новой книги можно было скоко угодно нажимать на кнопку и без всяких ошибок появлялся MsgBox

Так что если у тебя проблемы, то дело скорей всего в каких то настройках твоего офиса и смена кода тебе не поможет, потому что дело не в нем. Да и вообще, я бы не оставлял без внимания тот факт, что работающий у всех код, на каком то одном компьютере не работает. Если уж не разобрался бы в причинах, то по крайне мере снес бы office и поставил его заново



Спасибо за совет.
По крайней мере он заставил меня внимательно проверить код и найти ошибку (был указана неверная ссылка на компонент проекта). Пример для рабочего листа заработал.
Но (опять же увы) это не мой случай. Коллекция OLEObjects не принадлежит формам. Не применим к ним и одноименный метод.
Еще раз всем спасибо. Буду думать дальше.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог