类模块中的WithEvent未从Excel VBA中的Let属性获取变量

类模块中的WithEvent未从Excel VBA中的Let属性获取变量,excel,vba,class,Excel,Vba,Class,我想我错过了一些简单的东西。尝试在类模块中使用变量。让我们好好工作吧。但是如果我尝试在类模块的另一个子模块中使用该变量,我只会得到一个值0 类模块clsCombobox Public WithEvents ComboBox As MSForms.ComboBox Public WithEvents ComboTextBox As MSForms.TextBox Public Num As Long Public Property Let Number(Value As Long) N

我想我错过了一些简单的东西。尝试在类模块中使用变量。让我们好好工作吧。但是如果我尝试在类模块的另一个子模块中使用该变量,我只会得到一个值0

类模块clsCombobox

Public WithEvents ComboBox As MSForms.ComboBox
Public WithEvents ComboTextBox As MSForms.TextBox

Public Num As Long

Public Property Let Number(Value As Long)
    Num = Value
End Property

Public Property Get Number() As Long
    Number = Num
End Property

Private Sub ComboBox_Change()
    Me.ComboTextBox.Value = Num
    'this gives value of 0
End Sub
用户表单模块

Dim obEvents as clsCombobox
Set obEvents = New clsCombobox
obEvents.Number = 52
MsgBox obEvents.Number 'this prints 52
设置组合框的子对象

Private Sub GroupCombobox()
Dim i As Long
Dim obEvents As clsCombobox

Set collCombobox = New Collection

For i = 1 To 5
    Set obEvents = New clsCombobox
    Set obEvents.ComboBox = Me.Controls("cbAbility" & i)
    Set obEvents.ComboTextBox = Me.Controls("tbAbility" & i & "Text")
    collCombobox.Add obEvents
Next i

End Sub

看起来你从来没有设定过这个值。我想你是想在循环中这样做?也许不是用
i
的值,但是在这里你可以看到这个想法

For i = 1 To 5
    Set obEvents = New clsCombobox

    'Set the value here
    obEvents.Number = 52 ' 52 or whatever is needed as Number

    Set obEvents.ComboBox = Me.Controls("cbAbility" & i)
    Set obEvents.ComboTextBox = Me.Controls("tbAbility" & i & "Text")
    collCombobox.Add obEvents
Next i

为了正确封装,
Num
应该是一个
Private
字段。您可以共享设置
ComboBox
ComboTextBox
的代码吗?添加了代码。如果我将ComboBox\u Change子项设置为
=52
=Me.ComboBox.ListIndex
,则它运行良好。它是关于获取该变量的。谁/从何处调用
ComboBox\u Change
?ComboBox\u Change只是当您在集合中的一个组合框的下拉列表中选择任何选项时的事件
i
只是循环向集合添加一些控件。因此,
cbAbility1
cbAbility2
是不同的组合框。当你在他们的下拉列表中选择某个内容时,该类允许他们以相同的方式进行操作。@bigbucky也许你只是忘记了obEvents.Number=52在for i=1到5循环中?如果不设置该数字,则其值仍然为零@ThunderFrame你的意思是
数字
不是
?我明白了。我没有意识到我必须为每个控件设置它。我想,一旦设置了变量,它就会在类模块中保持设置。我不使用计算机,但稍后会尝试。不,每个对象都独立于其他对象,它是不同的内存位置,每个对象都有自己的状态和数据等。类模块就像是在设计时创建的对象模板。在运行时,对象是基于此模板创建的,每个对象都是隔离的,位于另一个内存位置。