VBA Userform ComboBox实例化
VBA Userform ComboBox instantiation
我的用户表单有问题,我称之为 "ComboTest2"。它只包含两个组合框。如果我将 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 使用 "default instantiation" 这意味着我将 FillMain Sub 更改为:
Sub FillMain2()
Dim ComboForm2 As ComboTest2
Set ComboForm2 = New ComboTest2
'ComboForm2.Show
ComboTest2.Show
End Sub
然后一切都很好。为什么呢?
此致
这是因为 FillCombo
按名称引用用户表单,因此引用默认实例(您实际上是在创建表单的新实例)。如果该代码不在用户窗体中,而且我不确定为什么要将它放在窗体之外,您应该将组合框作为参数传递给它。
我的用户表单有问题,我称之为 "ComboTest2"。它只包含两个组合框。如果我将 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 使用 "default instantiation" 这意味着我将 FillMain Sub 更改为:
Sub FillMain2()
Dim ComboForm2 As ComboTest2
Set ComboForm2 = New ComboTest2
'ComboForm2.Show
ComboTest2.Show
End Sub
然后一切都很好。为什么呢?
此致
这是因为 FillCombo
按名称引用用户表单,因此引用默认实例(您实际上是在创建表单的新实例)。如果该代码不在用户窗体中,而且我不确定为什么要将它放在窗体之外,您应该将组合框作为参数传递给它。