Я пытаюсь динамически создать фигуру в VBA, а затем назначить ей событие мыши, чтобы, если пользователь наводит курсор мыши на фигуру, событие вызывалось.
Я искал в этомфорум и в других местах в Интернете, и понял, что формы не могут быть связаны события.Обходной путь - добавить сверху элемент управления from (например, Label) и добавить к нему событие.
Поскольку я динамически создаю метку, я понимаю, что мне нужно создать пользовательский Class
и определитьметка WithEvents
, чтобы вызвать событие.Я написал код ниже, но получаю сообщение об ошибке
«Объект не генерирует события автоматизации».
Код для определения класса:
'Class name clsEventShape
Public WithEvents evtLabel As Label
Private Sub evtLabel_mousemove()
MsgBox "Mouse Moved!!"
End Sub
Код для генерации формы и надписи:
Option Explicit
Option Base 1
Dim Lbl As Label
Dim evtLbl As clsEventShape
Dim Shp As Shape
Dim WS As Worksheet
Public Sub addShape()
WS = ActiveSheet
Set Shp = WS.Shapes.addShape(msoShapeRoundedRectangle, 10, 10, 100, 100)
With Shp
.Fill.ForeColor.RGB = RGB(Rnd() * 255, Rnd() * 255, Rnd() * 255)
End With
evtLbl = New clsEventShape
Set evtLbl.evtLabel = WS.Controls.Add("Form.Label.1")
Set Lbl = evtLbl.evtLabel
With Lbl
.Left = 10
.Top = 10
.Width = 100
.Height = 100
.Caption = "Hello"
End With
End Sub