Форум программистов, компьютерный форум CyberForum.ru

VBA

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.70
mklokov
1 / 1 / 0
Регистрация: 21.07.2011
Сообщений: 28
#1

Обработчик события - VBA

03.08.2011, 13:56. Просмотров 3809. Ответов 10
Метки нет (Все метки)

Здравствуйте, все!
Нужна помощь в решении задачи на VBA (Excel)
Программно создать новую книгу, добавить на лист элемент управления (кнопка).
Что-то в этом духе:
Visual Basic
1
2
3
4
5
6
Sub MyMacro()
    Workbooks.Add
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=433.5, Top:=129, Width:=171, Height:= 82.5).Select
    Worksheets(1).OLEObjects("CommandButton1").Object.Caption = "Какая-то надпись на кнопке"
End Sub
Собственно вопрос: как ПРОГРАММНО организовать то, чтобы по нажатию на кнопку запускался макрос из моего модуля? Т. е. автоматизировать создание обработчика события Click.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2011, 13:56     Обработчик события
Посмотрите здесь:

Не срабатывает обработчик события - VBA
Добрый день, столкнулся с такой проблемой: не срабатывает обработчик события Worksheet_Change, не идет и хоть убей, попробовал какой то...

Обработчик события для TextBox - VBA
Всем добрый день! У меня на форме в Excel есть TextBox с текстом "dd.mm.yyyy". Как проверить условие, что курсор находится в данном...

Обработчик события для 2 фреймов - VBA
Есть два фрейма, в первом 2 optinbar'а, надо написать обработчик с помощью которого при выборе 1 из optinbar'а, на 2 фрейме появляется 1 из...

Повесить обработчик события на вставку строки - VBA
Подскажите, плиз, как повесить обработчик события на вставку строки в Экселе? Если это невозможно, то так и скажите:( Поиском нашла...

Как назначить обработчик события at runtime - VBA
Скажите, плиз, как назначить обработчик события OnChange at runtime для CheckBox-a, создаваемого также at runtime? Если создается CheckBox...

Как динамический повесить на кнопку обработчик события Click ? - VBA
Оргомная просьба: не подскажет ли кто-нибудь как динамический повесить на кнопку обработчик события Click ? В макросе для Word...

Обработчик события "вставка строки" - VBA
Всем доброй ночи! Не подскажите решение для начинающего пользователя? Задача следующая: при нажатии на кнопку (элемент управления)...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Watcher_1
352 / 158 / 26
Регистрация: 21.06.2011
Сообщений: 350
03.08.2011, 14:05     Обработчик события #2
Пойдет?

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub MyMacro()
    Workbooks.Add
    
    ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
        , DisplayAsIcon:=False, Left:=433.5, Top:=129, Width:=171, Height:=82.5).Select
    Worksheets(1).OLEObjects("CommandButton1").Object.Caption = "Какая-то надпись на кнопке"
    
    Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 2, "Private Sub CommandButton1_Click()"
    Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "msgbox  "" Hello World """
    Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 4, "End Sub"
End Sub
mklokov
1 / 1 / 0
Регистрация: 21.07.2011
Сообщений: 28
03.08.2011, 14:50  [ТС]     Обработчик события #3
Да, спасибо большое!

Добавлено через 37 минут
Цитата Сообщение от Watcher_1 Посмотреть сообщение
Пойдет?

Visual Basic
1
2
3
    .....
    Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "msgbox  "" Hello World """
    .....
MsgBox работает, а вызов моего макроса, не работает, т. к. последний определён в другом модуле в другой книге. ( Как быть?
Т. е. как программно заставить обработчик выполнить мой макрос?
Watcher_1
352 / 158 / 26
Регистрация: 21.06.2011
Сообщений: 350
03.08.2011, 14:56     Обработчик события #4
Думаю так
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "Call Название_подпрограммы_в_модуле ()"
mklokov
1 / 1 / 0
Регистрация: 21.07.2011
Сообщений: 28
03.08.2011, 15:27  [ТС]     Обработчик события #5
Цитата Сообщение от Watcher_1 Посмотреть сообщение
Думаю так
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "Call Название_подпрограммы_в_модуле ()"
Call book1_module1_makro1?
Watcher_1
352 / 158 / 26
Регистрация: 21.06.2011
Сообщений: 350
03.08.2011, 16:02     Обработчик события #6
Команда запуска из другого файла такая
Application.Run "Book2.xls!my1"
Где my1 это имя подпрограммы
mc-black
2738 / 671 / 97
Регистрация: 04.02.2011
Сообщений: 1,393
03.08.2011, 17:15     Обработчик события #7
Попробуйте переделать немного мой код из темы: Суперфильтр (готовое решение)

Там в стандартьный модуль книги с макросом я помещаю текcт процедуры обработчика и следом процедура вставки этого обработчика в произвольный лист произвольной книги. Во время исполнения вставки код макроса можно даже "на лету" подредактировать.

Добавлено через 9 минут
Вот рабочий пример того, что надо поместить в стандартный модуль с именем Module1 (на это имя модуля есть указание в коде):
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Option Explicit
 
Private Sub CommandButton1_Click()
    MsgBox "Hello, Cyberforum!"
End Sub
 
Sub test()
    Dim s As String
    
    s = ThisWorkbook.VBProject.VBComponents("Module1").CodeModule.Lines(3, 3)
    
    ActiveSheet.Parent.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule.AddFromString s
End Sub
Если запустить макрос test на любом активном листе появится код обработчика (независимо от наличия кнопки), который скопируется туда из нашего стандартного модуля начиная с третьей строки и длиной всего в три строки .Lines(3, 3)
mklokov
1 / 1 / 0
Регистрация: 21.07.2011
Сообщений: 28
03.08.2011, 17:59  [ТС]     Обработчик события #8
Всем большое спасибо!
Задача решена.
Ципихович Эндрю
1353 / 312 / 15
Регистрация: 10.04.2009
Сообщений: 4,726
03.08.2011, 18:59     Обработчик события #9
Watcher_1, Ваше сообщение № 2 для Ворда как будет?? Спасибо

Добавлено через 22 минуты
как добавить кнопку я знаю
'
Visual Basic
1
2
добавить кнопку ... в документе согласно Start ... и End ...
ActiveDocument.Range(Start:=0, End:=0).InlineShapes.AddOLEControl ClassType:="Forms.CommandButton.1"
а как надпись на кнопке, код кнопки??
Watcher_1
352 / 158 / 26
Регистрация: 21.06.2011
Сообщений: 350
03.08.2011, 20:47     Обработчик события #10
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
Watcher_1, Ваше сообщение № 2 для Ворда как будет?? Спасибо

Добавлено через 22 минуты
как добавить кнопку я знаю
'
Visual Basic
1
2
добавить кнопку ... в документе согласно Start ... и End ...
ActiveDocument.Range(Start:=0, End:=0).InlineShapes.AddOLEControl ClassType:="Forms.CommandButton.1"
а как надпись на кнопке, код кнопки??
По этому вопросу вам сюды....
http://www.script-coding.com/MSOffice.html
У меня все сработало

Добавлено через 3 минуты
Смотрите код в этой теме Динамическое создание и запуск процедур и функций VBA
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2011, 20:54     Обработчик события
Еще ссылки по теме:

Обработчик ошибок - VBA
Обрабатывает ли оператор on error ошибки типа compile error (к примеру syntax error) или только глобальные, которые с debug и end?

Обработчик ошибок - VBA
Наконец таки в изучении VBA добрался до момента когда понадобилось использование обработчика ошибок и приехал. Чтение форумов не очень...

Обработчик клика по кнопке! - VBA
Всем доброго времени суток!!! Помогите пожалуйста!!!!!!!! Существует отчет в Access, т.к. "Поле список" не дает нужного, создали...

Обработчик событий нескольких контролов? - VBA
Вообще-то я программирую на Delphi, а тут понадобилось сделать проект на VBA в Excel и обнаружилось, что я не представляю, как назначить...

Один обработчик на несколько кнопок - VBA
Всем привет. Пишу проект в Excel'e. Будет пользовательская форма - пара элементов и 4 кнопки. Нужно повесить на эти 4 кнопки примерно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ципихович Эндрю
1353 / 312 / 15
Регистрация: 10.04.2009
Сообщений: 4,726
03.08.2011, 20:54     Обработчик события #11
не нашёл, какой раздел
Использование диалогов открытия и сохранения файлов
Конвертация форматов файлов (Save As...) с помощью Excel и Word.
Запуск процедур и функций VBA из существующего документа MS Office
Динамическое создание и запуск процедур и функций VBA
??????
Увидел добавленное смотрю

Добавлено через 3 минуты
вижу как код пишут, а к какой он кнопке??
Yandex
Объявления
03.08.2011, 20:54     Обработчик события
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru