AddItem 不填充组合框中的选项

AddItem not populating options in combo box

我有以下表格。我已经按照 .AddItem "" 添加了每个项目,但是它们没有填充到用户表单的 combobox 中。

(这是在一个单独的模块中引用用户表单)

代码

 With frmForm

    .txtFirst.Value = ""
    .txtLast.Value = ""
    .txtYear.Value = ""

    .cmbSchool.Clear
    .cmbSchool.AddItem "Harvard"
    .cmbSchool.AddItem "Northwestern"
    .cmbSchool.AddItem "UCBerkley"
    .cmbSchool.AddItem "Stanford"
    .cmbSchool.AddItem "NYU"
    .cmbSchool.AddItem "UoT"
    .cmbSchool.AddItem "UBC"
    .cmbSchool.AddItem "RMC"

    End With

谢谢!

您的问题是,在用户窗体代码模块中,您不应引用 窗体的默认名称(将其视为此 进一步实例的蓝图class),但 当前对象实例 实际上是 运行 - 例如通过在控件前面加上 Me. 限定符。

这确实假定代码已移动到表单自己的代码模块中 - Initialize 处理程序将是一个很好的地方。

填充用户窗体组合框的方法

a) 通过.AddItem方法填充

    With Me.cmbSchool                       ' don't refer to the form's default instance
        .Clear
        .AddItem "Harvard"
        .AddItem "Northwestern"
        .AddItem "UCBerkley"
        .AddItem "Stanford"
        .AddItem "NYU"
        .AddItem "UoT"
        .AddItem "UBC"
        .AddItem "RMC"
    End With

b) 通过数组填充

通过将数组直接分配给方框 .List 属性 选择这种方法,您可以将代码缩短为:

    Dim SchoolList As Variant
    SchoolList = "Harvard,Northwestern,UCBerkley,Stanford,NYU,UoT,UBC,RMC"
    Me.cmbSchool.List = Split(SchoolList, ",")


因 comment/2020-03-30

而编辑

"Can you define what you mean by instance?"

A class - 用户窗体仅代表一种特殊类型的 class 模块 - 可以被视为某种 对象模板

class对象的所谓实例(基于用户窗体提供的所有属性、方法和事件|class) 将在 运行 时间创建为一个 ►New 对象,可以访问“.” properties ,即它正在 'newed' (可能重复)到您声明并设置为内存的当前对象。

如果您更喜欢从单独的模块(而不是在表单的 UserForm_Initialize() 处理程序中)调用过程,您可以 "hold on to the object/instance (as long as you need it)" 通过如下所示的正式对象设置(或者:Dim myFrm As New frmForm)。

标准模块中的示例调用

Sub ShowFormExample()
Dim myFrm    As frmForm   ' declare myFrm as object type belonging to your form's class
Set myFrm = New frmForm   ' set myFrm as new object instance to memory

FillItems myFrm           ' << call procedure FillItems
                  ' or integrate code here: Dim .../ SchoolList = ... / myFrm.cmbSchool.List = ...

myfrm.Show                ' form's .Show-method;  argument equals vbModal by default

End Sub

程序FillItems

Sub FillItems(myFrm As UserForm)
With myFrm
    Dim SchoolList As Variant
    SchoolList = "Harvard,Northwestern,UCBerkley,Stanford,NYU,UoT,UBC,RMC"
    .cmbSchool.List = Split(SchoolList, ",")
End With
End Sub

推荐阅读