powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как повесить событие Click на Label?
4 сообщений из 4, страница 1 из 1
Как повесить событие Click на Label?
    #33337867
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю Label програмно:
Код: plaintext
Selection.InlineShapes.AddOLEControl ClassType:="Forms.Label.1"
Как теперь повесить на неё событие Click?


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Как повесить событие Click на Label?
    #33338312
Дмит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Private WithEvents lb As Label

Sub qwe()
Set lb = Selection.InlineShapes.AddOLEControl(ClassType:="Forms.Label.1").OLEFormat.Object
lb.Caption = "Надпись"
lb.Name = "lab"
End Sub
Private Sub lab_Click()
.....
End Sub
...
Рейтинг: 0 / 0
Как повесить событие Click на Label?
    #33376821
Фотография Jetus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник

Я пробовал сделать так как ты сказал, но у меня еще есть вопросы:
1. Обе процедуры должны быть в одном модуле?
2. В стоке "Private WithEvents lb As Label" возникает ошибка, если писать процедуры в простом модуле. Использовать Class Module?


______________________________
Never Surrender - Nothing Impossible!
...
Рейтинг: 0 / 0
Как повесить событие Click на Label?
    #33377967
Вариант 1.

Модуль листа.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private lbl As MSForms.Label

Sub AddLabel1()
    Set lbl = Worksheets("Лист1").OLEObjects.Add _
      (ClassType:="Forms.Label.1").Object
    
    lbl.Name = "Label1"
    lbl.Caption = "Заголовок1"
End Sub

Private Sub Label1_Click()
    MsgBox "AddLabel1!", vbInformation
End Sub

Процедура Label1_Click должна быть явна объявлена в модуле листа.

Вариант 2.

Стандартный модуль.

Код: 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.
Sub AddLabel2()
    Dim lbl As MSForms.Label
    Dim vbc As VBComponent
    Dim cm As CodeModule
    Dim i As Integer
    
    Set lbl = ThisWorkbook.Worksheets("Лист1").OLEObjects.Add _
      (ClassType:="Forms.Label.1").Object
    lbl.Name = "Label1"
    lbl.Caption = "Заголовок1"
      
    With ThisWorkbook
        Set vbc = .VBProject.VBComponents(.Worksheets("Лист1").CodeName)
    End With
    
    Set cm = vbc.CodeModule
    
    With cm
        i = .CountOfLines +  1 
        .InsertLines i, "Private Sub " & lbl.Name & "_Click()"
        i = i +  1 
        .InsertLines i, _
        "    MsgBox ""AddLabel2!"", vbInformation"
        i = i +  1 
        .InsertLines i, "End Sub"
    End With
    
    Set cm = Nothing
    Set vbc = Nothing
    Set lbl = Nothing
End Sub

Процедура Label1_Click программно добавляется в модуль листа.

Вариант 3.

Модуль класса.

Код: plaintext
1.
2.
3.
4.
Public WithEvents lbl As MSForms.Label

Private Sub lbl_Click()
    MsgBox "AddLabel3"
End Sub

Стандартный модуль.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Sub AddLabel3()
    Dim lbl As MSForms.Label
    
    Set lbl = ThisWorkbook.Worksheets("Лист1").OLEObjects.Add _
      (ClassType:="Forms.Label.1").Object
    lbl.Name = "Label1"
    lbl.Caption = "Заголовок1"
    
    Set lbl = Nothing
End Sub

Sub AddEventToLabel1()
    Set cls.lbl = ThisWorkbook.Worksheets("Лист1").OLEObjects("Label1").Object
End Sub

Set cls.lbl надо вызывать вне процедуры AddLabel3 и желательно на Workbook_Open еще вешать, чтобы была актуальна.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как повесить событие Click на Label?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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