【问题标题】:VBA Userform ComboBox instantiationVBA Userform ComboBox 实例化
【发布时间】:2017-12-14 14:10:11
【问题描述】:

我有一个我称之为“ComboTest2”的用户表单的问题。它仅由两个组合框组成。如果我将 USerform 实例化为一个对象,那么下面的代码在 Userform 的第二个组合框不包含所需数据的意义上不起作用。

Sub FillCombo(ByVal row As Long)

    Dim rgCities As Range
    Set rgCities = Worksheets("Tabelle2").Range("B2:D2").Offset(row)
    ComboTest2.ComboBox2.Clear
    ComboTest2.ComboBox2.List = WorksheetFunction.Transpose(rgCities)
    ComboTest2.ComboBox2.ListIndex = 0

End Sub

Sub FillMain()

    Dim ComboForm2 As ComboTest2
    Set ComboForm2 = New ComboTest2
    ComboForm2.Show

End Sub

用户窗体代码:

Private Sub CommandButton1_Click()
    Me.Hide

End Sub

Private Sub CommandButton2_Click()
    Me.Hide
End Sub

Private Sub ComboBox1_Change()
    FillCombo ComboBox1.ListIndex
End Sub

Private Sub UserForm_Initialize()

    ComboBox1.List = Worksheets("Tabelle2").Range("A2:A5").Value
    ComboBox1.ListIndex = 0
    FillCombo ComboBox1.ListIndex
End Sub

但是如果我使用 VBA 的“默认实例化”,这意味着我将 FillMain Sub 更改为:

Sub FillMain2()

    Dim ComboForm2 As ComboTest2
    Set ComboForm2 = New ComboTest2
    'ComboForm2.Show
    ComboTest2.Show

End Sub

然后一切都很好。为什么呢?

最好的问候

【问题讨论】:

    标签: excel combobox userform vba


    【解决方案1】:

    这是因为FillCombo 按名称引用用户表单,因此指向默认实例(您实际上是在创建表单的新实例)。如果该代码不在用户表单中,并且我不确定为什么要将它放在表单之外,则应该将组合框作为参数传递给它。

    【讨论】:

    • 谢谢罗里,这对我有帮助。我被告知不要将像“FillCombo”Sub 这样的 Subs 集成到 UserForm 代码中。他们说这不是好的编程风格。
    • @Philipp_PK 它的编写方式,将它放在表单之外根本没有意义,因为它特定于那个表单和那个组合框。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多