【发布时间】:2017-11-21 12:48:13
【问题描述】:
我在 excel 中有一个表单,我需要在其中动态创建组合框和列表框。所以,这个想法是,每个列表框都链接到组合框。第一个默认设置,如果用户需要添加另一个组合+列表框,可以按“添加”按钮。所以“添加”按钮的代码如下:
Private Sub AddCountry_Click()
aaa = "a"
Set comb = Controls.Add("Forms.Combobox.1", "CountryList" & Val(CountryLabel.Caption) + 1)
With comb
.Top = CountryList1.Top
.Width = CountryList1.Width
.Height = CountryList1.Height
.Left = (CountryList1.Width + 3) * Val(CountryLabel.Caption) + CountryList1.Left
.AddItem ("--Choose country--")
For i = 3 To 20
.AddItem Worksheets("Countries").Range("B" & i).Value
Next i
.Text = "--Choose country--"
End With
Set listb = Controls.Add("Forms.Listbox.1", "Countries" & Val(CountryLabel.Caption) + 1)
With listb
.Top = Countries1.Top
.Width = Countries1.Width
.Height = Countries1.Height
.Left = (Countries1.Width + 3) * Val(CountryLabel.Caption) + Countries1.Left
.ColumnCount = 2
.MultiSelect = 1
End With
CountryLabel.Caption = Val(CountryLabel.Caption) + 1
End Sub
这个想法是,组合框必须有名称“CountryList”和一个数字,存储在不可见标签中(每次按下按钮时都会添加 +1),所以它将是 CountryList1、CountryList2 等. 列表框也是如此。
所以事情是这样的,组合框和值(国家名称)被正确添加。但是我没搞定,以后怎么用呢?我需要的是 - 当组合框发生变化时(用户选择不同的国家),下面的列表框必须填充某些值(每个国家不同)。
我认为,问题可能在于定义组合/列表框的名称。那么是否可以添加动态名称(CountryList1、CountryList2 等),然后以某种方式添加 OnChange 事件?提前致谢。
【问题讨论】:
-
你需要有一个Class模块,有
ListBox Events和ComboBox Events -
看看这个问题:stackoverflow.com/questions/44409871/… - 我确实在这里解决了。正如@ShaiRado 已经说过的那样,您需要一个额外的课程。你追求的是我放在那里的 cComboBox 类。
标签: vba excel dynamic combobox listbox