Форум программистов и сисадминов CyberForum.ru
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум Форум программистов > Форум Basic > Форум VBA
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Старый 03.08.2011, 13:56   #1
mklokov
Новичок
 
Регистрация: 21.07.2011
Сообщений: 27
Репутация: 1 (1)
Обработчик события / VBA

Здравствуйте, все!
Нужна помощь в решении задачи на VBA (Excel)
Программно создать новую книгу, добавить на лист элемент управления (кнопка).
Что-то в этом духе:
Код Code
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.
Старый 03.08.2011, 14:05   #2
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 21.06.2011
Сообщений: 254
Репутация: 299 (105)
Лучшие ответы: 5
Обработчик события

Пойдет?

Код 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
Другие темы раздела Форум программистов VBA. Программирование на Visual Basic for Applications. Помощь в решении задач.
VBA Проблема с format для осей графика
Тут выяснилось, что поле .format у класса axe - read only, и соответственно не получается ничего оттуда брать и менять. Хотя макрорекордер записывает нам к примеру такие вещи для изменения размера шрифта для оси: ActiveSheet.ChartObjects("Chart 1").Activate ...
VBA Удаление содержимого части ячейки таблицы в Word 2003
Уважаемые знатоки, очень требуется помощь. Имеем документ MS Word 2003 (*.rtf, *.doc), в документе таблица. В ячейках таблицы требуется удалить из некоторых ячеек (не из всех!) часть текста. Пример исходного и преобразованного документа во вложении. Заранее благодарен.
Старый 03.08.2011, 14:50  [ТС]   #3
mklokov
Новичок
 
Регистрация: 21.07.2011
Сообщений: 27
Репутация: 1 (1)
Обработчик события

Да, спасибо большое!

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

Код Visual Basic
1
2
3
    .....
    Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.InsertLines 3, "msgbox  "" Hello World """
    .....
MsgBox работает, а вызов моего макроса, не работает, т. к. последний определён в другом модуле в другой книге. ( Как быть?
Т. е. как программно заставить обработчик выполнить мой макрос?
Старый 03.08.2011, 14:56   #4
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 21.06.2011
Сообщений: 254
Репутация: 299 (105)
Лучшие ответы: 5
Обработчик события

Думаю так
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.I nsertLines 3, "Call Название_подпрограммы_в_модуле ()"
Старый 03.08.2011, 14:56
Google
Объявления
Старый 03.08.2011, 15:27  [ТС]   #5
mklokov
Новичок
 
Регистрация: 21.07.2011
Сообщений: 27
Репутация: 1 (1)
Обработчик события

Цитата Сообщение от Watcher_1 Посмотреть сообщение
Думаю так
Application.VBE.ActiveVBProject.VBComponents(2).CodeModule.I nsertLines 3, "Call Название_подпрограммы_в_модуле ()"
Call book1_module1_makro1?
Старый 03.08.2011, 16:02   #6
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 21.06.2011
Сообщений: 254
Репутация: 299 (105)
Лучшие ответы: 5
Обработчик события

Команда запуска из другого файла такая
Application.Run "Book2.xls!my1"
Где my1 это имя подпрограммы
Старый 03.08.2011, 17:15   #7
mc-black
Форумчанин
 
Аватар для mc-black
 
Регистрация: 04.02.2011
Сообщений: 999
Репутация: 2332 (521)
Лучшие ответы: 40
Обработчик события

Попробуйте переделать немного мой код из темы: Суперфильтр (готовое решение)

Там в стандартьный модуль книги с макросом я помещаю тек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)
Старый 03.08.2011, 17:59  [ТС]   #8
mklokov
Новичок
 
Регистрация: 21.07.2011
Сообщений: 27
Репутация: 1 (1)
Обработчик события

Всем большое спасибо!
Задача решена.
Старый 03.08.2011, 18:59   #9
Ципихович Эндрю
Форумчанин
 
Регистрация: 10.04.2009
Сообщений: 4,030
Репутация: 1205 (291)
Лучшие ответы: 6
Обработчик события

Watcher_1, Ваше сообщение № 2 для Ворда как будет?? Спасибо

Добавлено через 22 минуты
как добавить кнопку я знаю
'
Код Visual Basic
1
2
добавить кнопку ... в документе согласно Start ... и End ...
ActiveDocument.Range(Start:=0, End:=0).InlineShapes.AddOLEControl ClassType:="Forms.CommandButton.1"
а как надпись на кнопке, код кнопки??
Старый 03.08.2011, 20:47   #10
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 21.06.2011
Сообщений: 254
Репутация: 299 (105)
Лучшие ответы: 5
Обработчик события / VBA

Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
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
Старый 03.08.2011, 20:47
Yandex
Объявления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Автор
jQuery не работает обработчик события
в результате выполнения функции $('#r_1lvl').append('<div class="re"></div>') получаю: <div id="r_1lvl"> <div class="re"></div> </div> Есть функция: $('.re').dblclick(function(){
Mefen
C# .NET Обработчик события
Подскажите, пожалуйста, как в обработчике события записать условие: если событие происходит в первый раз, то... , иначе ...
4dimuser
C# .NET Обработчик события
Как в обработчике события к примеру CellContentDoubleClick в нутри контрола вызвать новое событие и перехватить его в форме? private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.CellContentDoubleClick += new...
yardie
C# Windows Forms .NET 4.x Обработчик события
Уважаемые профи требуется ваш совет ! Есть два обработчика события 1. private void layoutView_InvalidRowException(object sender, InvalidRowExceptionEventArgs e) { e.RowHandle }
Plastik-X
Delphi для начинающих Обработчик события
Здравствуйте, подскажите а как сделать так, что бы при нажатии на кнопку открывалась другая форма.
Марат-1
Опции темы

Текущее время: 18:43. Часовой пояс GMT +4.

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.