Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (VBA + Excel Кнопка на листе) v.2 / 8 сообщений из 8, страница 1 из 1
06.09.2011, 17:57
    #37427706
(VBA + Excel Кнопка на листе) v.2
Доброго времени суток.
Прошу помочь с нижеследующим макросом (аналогичная тема поднята здесь http://www.sql.ru/forum/actualthread.aspx?tid=227804).
Итак, в книге Excel программно создается определенное число новых листов. На каждый лист помещается одна и та же кнопка.
Есть модуль, в котором написан код, который должен запускаться по нажатию вновь созданных кнопок и обрабатывать именно тот лист, на котором нажата кнопка.
Кнопки создаются именно таким способом:

activelist.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=415, Top:=285, Width:=70, Height:=31.5).Select
Selection.Object.Caption = "Расчет"
Selection.Object.Font.Bold = True
Selection.Object.Font.Size = 12

Вопрос: как сделать так, чтобы вновь созданные кнопки ссылались на существующий код в модуле?
Весь инет перекопал, и книги, поэтому обращение на форум обосновано. =)
Заранее благодарен за идеи!
...
Рейтинг: 0 / 0
06.09.2011, 21:22
    #37427978
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
Элементарно, Ватсон Роман. Потому и нет в книгах и интернете. =)
Если создается кнопка с именем CommandButton1, то в коде листа нужно создать процедуру Private Sub CommandButton1_Click(), вызывающую процедуру из модуля.
...
Рейтинг: 0 / 0
06.09.2011, 21:31
    #37427986
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
Просто РоманВопрос: как сделать так, чтобы вновь созданные кнопки ссылались на существующий код в модуле?
процедуру - в обычный модуль обрабатываемой книги. Вместо
Код: plaintext
1.
2.
    .InsertLines i, _
    "    MsgBox "" ...
    i = i +  1 
добавляете вызов Вашего "кода" с необходимыми параметрами.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Option Explicit

' ====================================
' создание кнопки на активном листе
' с простейшим обработчиком события _Click
Sub AddButtonWithOnClickMethod()
Dim sName$, i&

With ActiveSheet.OLEObjects.Add( _
        ClassType:="Forms.CommandButton.1", _
        Left:= 415 , Top:= 285 , _
        Width:= 70 , Height:= 31 . 5 )
    
    ' генерация необходимого и изменение имени для вновь добавленной кнопки
    ' пригодится при создании обработчика события _Click
    sName = "bt_" & ActiveSheet.CodeName & "_12"
    .Name = sName
    
    With .Object
    .Caption = "Расчет_12"
    .Font.Bold = True
    .Font.Size =  12 
    End With
End With

' создание обработчика события _Click для вновь добавленной кнопки
' (!) в настройках безопасности макросов
'     должен быть установлен флаг 'Доверять доступ к Visual Basic Project'
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
    i = .CountOfLines +  1 
    .InsertLines i, "Private Sub " & sName & "_Click()"
    i = i +  1 
    .InsertLines i, _
    "    MsgBox ""через Ж, но работает..."", vbInformation"
    i = i +  1 
    .InsertLines i, "End Sub"
End With
End Sub
...
Рейтинг: 0 / 0
06.09.2011, 21:36
    #37427989
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
скукотища, глядя на Ваш ответ, понимаешь, что это можно сделать если кнопка на форме??
если да то как??
...
Рейтинг: 0 / 0
06.09.2011, 21:55
    #37428012
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
Милый Ципихович Эндрю,
Вы не глядите, а в новой книге Excel
- добавьте модуль
- скопируйте в него вышеприведенный код,
- установите в настройках безопасности макросов флвг 'Доверять доступ к Visual Basic Project'
- запустите процедуру AddButtonWithOnClickMethod
- оцените нанесенный ущерб результаты.

Практика - критерий истины (с) кто-то из...
...
Рейтинг: 0 / 0
06.09.2011, 22:22
    #37428039
Ципихович Эндрю
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
скукотища, ОК пробую
...
Рейтинг: 0 / 0
06.09.2011, 23:00
    #37428075
(VBA + Excel Кнопка на листе) v.2
Всех благодарю за разъяснение! Я рыл не в том направлении, искал свойство типа OnAction.
Завтра опробую ваши предложения.
...
Рейтинг: 0 / 0
06.09.2011, 23:00
    #37428076
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
(VBA + Excel Кнопка на листе) v.2
А вообще, ИМХО, нерационально использовать такой подход (OLE-кнопки, отдельные обработчики...)
Более правильно будет сделать примерно так:
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (VBA + Excel Кнопка на листе) v.2 / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]