Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
23.04.2024, 19:07:48

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 242 Сообщений в 5 457 Тем от 6 758 Пользователей
Последний пользователь: Сергей2662
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Как привязать к контролу исполняемый код?
Страниц: [1]   Вниз
Печать
Автор Тема: Как привязать к контролу исполняемый код?  (Прочитано 3203 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Kibor
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 12


Просмотр профиля E-mail
« : 06.09.2017, 09:42:39 »

Завёл модуль формы. Создал на нём контрол. Принципиально важно: создал не мышкой, а программно (огромное спасибо Parovoz’у!!!). А процедуру обработки клика на этом контроле программа в упор не видит. Создаю такой же контрол мышкой – та же самая процедура срабатывает. Prist предупреждал об этом, но предложенные им в качестве решения игры с модулями классов оказались слишком сложны для меня. Не может быть, чтобы не существовало решения попроще.

Вот код, которым создаётся контрол:

Код: (vb)
Private Sub UserForm_Initialize()
    Me.Height = 234: Me.Width = 440
    With Me.Controls.Add(bstrProgID:="Forms.CommandButton.1")
         .Name = "CommandButton1"
         .Left = 5
         .Top = 16
         .Height = 24
         .Width = 78
         .Caption = "Кнопка"
    End With
End Sub


Код, который должен обрабатывать клик:

Код: (vb)
Private Sub CommandButton1_Click()
    Range("Work!M1").Value = "Кнопка"
End Sub


Чего-то здесь не хватает!


P.S. Prist! А как отформатировать код? Чё-то у меня ничего не получается.
« Последнее редактирование: 06.09.2017, 10:25:17 от The_Prist » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 831



Просмотр профиля WWW
« Ответ #1 : 06.09.2017, 10:22:05 »

Prist! А как отформатировать код?
А вверху форума даже кнопка есть: помощь Улыбка Там подробно написано как использовать теги. Выделяете текст(в данном случае код) и жмете кнопку VBCode. Вроде не сильно сложная процедура.
По самому вопросу: Работа с модулями классов
Других решений нет вообще. Либо не создавать контролы программно, либо через модули классов.

Тут в чем дело: когда Вы создаете из формы событие для контрола(выбрав его из вып.меню для контрола или дважды на нем щелкнув), то VBA сам регистрирует данное событие для этого контрола. Тоже происходит и в случаях, когда контрол был создан руками(не кодом). конрол и его события автоматом регистрируются самим VBA. Когда вы такое событие просто пишете - то для контролов, созданных на лету это ничего не значит, т.к. сами контролы не зарегистрированы в системе как событийные. Поэтому события для них вообще не обрабатываются. И решается это исключительно созданием класса для контрола.
« Последнее редактирование: 06.09.2017, 10:25:00 от The_Prist » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Kibor
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 12


Просмотр профиля E-mail
« Ответ #2 : 07.09.2017, 04:59:27 »

М-дааа. Вот уж, что называется наповал! И всё равно, Prist, спасибо за участие.
Записан
Юрий М
Глобальный модератор
Ветеран
*****

Репутация: +112/-0
Офлайн Офлайн

Сообщений: 2 077



Просмотр профиля E-mail
« Ответ #3 : 07.09.2017, 23:08:38 »

А в чём сакральный смысл программного создания контрола?
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru