Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Динамическое добавление событие к кнопке ActiveX - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Динамическое добавление событие к кнопке ActiveX (Макросы/Sub)
Динамическое добавление событие к кнопке ActiveX
igoRRR Дата: Вторник, 05.12.2017, 11:11 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Привет всем!
Прошу помощи со следующим вопросом. На лист копирую кнопку ActiveX с другого листа в цикле. Необходимо при этом чтобы у всех скопированных кнопок было событие по нажатию.
Не могу найти ничего похожего. Может быть это сделать каким-нибудь другим способом. Помогите пожалуйста!

[vba]
Код
Sub AddPlus()
' Добавляем кнопку "Добавить задачу" в таблицу
For j = 2 To 10 Step 2
    For i = 5 To 30
        If IsEmpty(Sheets("Задачи").Cells(i, j).Value) Then
            Sheets("Ресурсы").Select
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Copy
            Sheets("Задачи").Select
            ActiveSheet.Cells(i, j).Select
            Sheets("Задачи").Paste
            Exit For
        End If
    Next i
Next j

For Each ob In Sheets("Задачи").OLEObjects
    If ob.Name Like "CommandButton*" Then
        ' Здесь нужно добавить код для события
    End If
Next

End Sub
[/vba]
 
Ответить
СообщениеПривет всем!
Прошу помощи со следующим вопросом. На лист копирую кнопку ActiveX с другого листа в цикле. Необходимо при этом чтобы у всех скопированных кнопок было событие по нажатию.
Не могу найти ничего похожего. Может быть это сделать каким-нибудь другим способом. Помогите пожалуйста!

[vba]
Код
Sub AddPlus()
' Добавляем кнопку "Добавить задачу" в таблицу
For j = 2 To 10 Step 2
    For i = 5 To 30
        If IsEmpty(Sheets("Задачи").Cells(i, j).Value) Then
            Sheets("Ресурсы").Select
            ActiveSheet.Shapes.Range(Array("CommandButton1")).Select
            Selection.Copy
            Sheets("Задачи").Select
            ActiveSheet.Cells(i, j).Select
            Sheets("Задачи").Paste
            Exit For
        End If
    Next i
Next j

For Each ob In Sheets("Задачи").OLEObjects
    If ob.Name Like "CommandButton*" Then
        ' Здесь нужно добавить код для события
    End If
Next

End Sub
[/vba]

Автор - igoRRR
Дата добавления - 05.12.2017 в 11:11
anvg Дата: Вторник, 05.12.2017, 12:13 | Сообщение № 2
Группа: Друзья
Ранг: Обитатель
Сообщений: 365
Репутация: 207 ±
Замечаний: 0% ±

2010, 2016
Доброе время суток.
Вы используете MSForms.CommandButton - с ними не так всё просто. почитайте.
Лучше используете так называемые кнопки элементов управления формы, для них можно назначить обработчик события, используя свойство OnAction такой кнопки.
 
Ответить
СообщениеДоброе время суток.
Вы используете MSForms.CommandButton - с ними не так всё просто. почитайте.
Лучше используете так называемые кнопки элементов управления формы, для них можно назначить обработчик события, используя свойство OnAction такой кнопки.

Автор - anvg
Дата добавления - 05.12.2017 в 12:13
astatsa Дата: Вторник, 05.12.2017, 15:27 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Здравствуйте.

Недавно была аналогичная задача, могу сказать, что добавить обработчик это не самое сложное, просто создаем класс в котором объявляем переменную-член с ключевым словом WithEvents и при создании объекта класса передаем ссылку на наш элемент. Но, есть один момент, не знаю по какой причине, когда происходит работа с ActiveX контролами программно, глобальные переменные очищаются, поэтому могут быть сюрпризы. К примеру, у меня по нажатию на кнопку, открывалась форма, а после этого обработчики просто очищались и кнопка больше не срабатывала. Нигде не смог найти инфы, почему так происходит. Я решил эту проблему пересозданием объектов классов-обработчиков после закрытия формы.

Если не критично использование ActiveX, то лучше последуйте совету anvg


Сообщение отредактировал astatsa - Вторник, 05.12.2017, 15:29
 
Ответить
СообщениеЗдравствуйте.

Недавно была аналогичная задача, могу сказать, что добавить обработчик это не самое сложное, просто создаем класс в котором объявляем переменную-член с ключевым словом WithEvents и при создании объекта класса передаем ссылку на наш элемент. Но, есть один момент, не знаю по какой причине, когда происходит работа с ActiveX контролами программно, глобальные переменные очищаются, поэтому могут быть сюрпризы. К примеру, у меня по нажатию на кнопку, открывалась форма, а после этого обработчики просто очищались и кнопка больше не срабатывала. Нигде не смог найти инфы, почему так происходит. Я решил эту проблему пересозданием объектов классов-обработчиков после закрытия формы.

Если не критично использование ActiveX, то лучше последуйте совету anvg

Автор - astatsa
Дата добавления - 05.12.2017 в 15:27
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Динамическое добавление событие к кнопке ActiveX (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!