powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / (VBA + Excel Кнопка на листе) v.2
8 сообщений из 8, страница 1 из 1
(VBA + Excel Кнопка на листе) v.2
    #37427706
Доброго времени суток.
Прошу помочь с нижеследующим макросом (аналогичная тема поднята здесь 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
(VBA + Excel Кнопка на листе) v.2
    #37427978
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Элементарно, Ватсон Роман. Потому и нет в книгах и интернете. =)
Если создается кнопка с именем CommandButton1, то в коде листа нужно создать процедуру Private Sub CommandButton1_Click(), вызывающую процедуру из модуля.
...
Рейтинг: 0 / 0
(VBA + Excel Кнопка на листе) v.2
    #37427986
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто РоманВопрос: как сделать так, чтобы вновь созданные кнопки ссылались на существующий код в модуле?
процедуру - в обычный модуль обрабатываемой книги. Вместо
Код: 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
(VBA + Excel Кнопка на листе) v.2
    #37427989
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотища, глядя на Ваш ответ, понимаешь, что это можно сделать если кнопка на форме??
если да то как??
...
Рейтинг: 0 / 0
(VBA + Excel Кнопка на листе) v.2
    #37428012
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Милый Ципихович Эндрю,
Вы не глядите, а в новой книге Excel
- добавьте модуль
- скопируйте в него вышеприведенный код,
- установите в настройках безопасности макросов флвг 'Доверять доступ к Visual Basic Project'
- запустите процедуру AddButtonWithOnClickMethod
- оцените нанесенный ущерб результаты.

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


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