Я использую Excel 2003 с VBA, я динамически создаю элементы управления флажком на листе и хочу связать элементы управления VBA с классом, чтобы при щелчке на флажке событие было запущено, поэтому я могу что-то сделать.Excel VBA как связать класс и элемент управления?
Из того, что я прочитал, казалось бы, что создание пользовательского класса является решением, но, попробовав это, я не могу заставить его работать.
Мой пользовательский класс выглядит следующим образом:
Option Explicit
Public WithEvents cbBox As MSForms.checkbox
Private Sub cbBox_Change()
MsgBox "_CHANGE"
End Sub
Private Sub cbBox_Click()
MsgBox "_CLICK"
End Sub
Мой код для создания флажков:
For Each varExisting In objColumns
'Insert the field name
objColumnHeadings.Cells(lngRow, 1).Value = varExisting
'Insert a checkbox to allow selection of the column
Set objCell = objColumnHeadings.Cells(lngRow, 2)
Dim objCBclass As clsCheckbox
Set objCBclass = New clsCheckbox
Set objCBclass.cbBox = ActiveSheet.OLEObjects.Add(_
ClassType:="Forms.CheckBox.1" _
, Left:=300 _
, Top:=(objCell.Top + 2) _
, Height:=10 _
, Width:=9.6).Object
objCBclass.cbBox.Name = "chkbx" & lngRow
objCBclass.cbBox.Caption = ""
objCBclass.cbBox.BackColor = &H808080
objCBclass.cbBox.BackStyle = 0
objCBclass.cbBox.ForeColor = &H808080
objCheckboxes.Add objCBclass
lngRow = lngRow + 1
Next
Флажки видны на листе, но когда я нажимаю на них, не окно сообщения отображается, поэтому ссылка на класс не работает.
Почему?
Редактировать ... Если после добавления флажков я перехожу в VB IDE и выбираю один из созданных флажков из списка элементов управления, а затем выберите «Щелчок» в раскрывающемся списке «Порядок», он вставляет код для вызова назад, который, если я добавлю в него окно сообщения, работает, когда я нажимаю на тот же флажок ... так как я могу достичь этого в коде? Я попытался записать макрос, чтобы сделать это, ничего не было записано.
Где объявляют objCheckboxes? –
objCheckboxes - это всего лишь коллекция. – SPlatten
Я понимаю, что, но я иногда ошибался, объявляя его внутри суб, который заполняет его, а не как глобальное .... –