VBA动态联动下拉组合框学习范例,想提高的速看

最终的演示效果:

演示效果

1、准备工作

根据自己工作的的实际情况,首先准备好数据。

2、添加组合框

点击开发工具-插入-选择ActiveX中的组合框控件,分别添加三个,组合框默认的名字分别是:ComboBox1,ComboBox2,ComboBox3,分别对应省,市,地区,然后自己排版一下控件的位置即可。

添加组合框

3、进入后台编写代码

二种方式可以进去后台

第一种方式:可以按组合键Alt+F11。

第二种方式:选择开发工具-VisualBasic。

进入后台后,双击左侧ThisWorkbook,在右侧写入一以下代码:

thisworkbook的代码

然后再双击Sheet1(DropDown),这个DropDown就是你给表格命名的名字,这一步你根据自己的实际情况就行,你的数据在哪个表格,就双击进去,在右侧代码区域写入以下代码:

表格后台代码

ThisWorkbook代码:

Private Sub Workbook_Open()

Dim ar As Variant

Dim j As Integer

Dim str As String

'下面的语句是把省,市,地区的数据赋值给数组变量ar,也包含了标题

ar = Sheet1.Range("A7").CurrentRegion

'j=2开始就是把标题给忽略,直接从数据开始循环

For j = 2 To UBound(ar)

'把省数据去重,并用逗号连接起来

If InStr(str & ",", "," & ar(j, 1) & ",") = 0 Then str = str & "," & ar(j, 1)

Next

'上个循环语句块结束后,str变量里面的值是:",所有,河北,河南,湖北"

Sheet1.ComboBox1.List = Split(Mid(str, 2), ",") '把前面的逗号去掉赋值给组合框1

Sheet1.ComboBox2.Clear '清空组合框2数据

Sheet1.ComboBox3.Clear '清空组合框3数据

End Sub

Sheet1(DropDown)代码:

Private Sub ComboBox1_Change()

ComboBox2.ListIndex = -1 '清空市组合框2数据

ComboBox3.ListIndex = -1 '清空地区组合框3数据

If ComboBox1.ListIndex > -1 Then '省组合框如果选择了某一数据,如:"河南省"

ComboBox2.List = Split(Cmbo(1), ",") '把"河南省"后面的"去重的市数据"(新乡)赋值给组合框2

End If

End Sub

Private Sub ComboBox2_Change()

If ComboBox2.ListIndex > -1 Then '市组合框如果选择了某一数据,如:"新乡"

ComboBox3.List = Split(Cmbo(2), ",") '把"新乡"后面的"去重地区数据"(牧野区,红旗区)赋值给组合框3

End If

End Sub

'如果参数传过来的是1,把把"河南省"后面的"去重的市数据"(新乡)赋值给组合框2

'如果参数传过来的是2,'把"新乡"后面的"去重地区数据"(牧野区,红旗区)赋值给组合框3

Function Cmbo(j)

Dim n As Integer

Dim i As Integer

Dim ar As Variant

Dim str As String

ar = Range("A7").CurrentRegion

For i = 1 To UBound(ar)

For n = 1 To j

If ar(i, n) <> Sheet1.OLEObjects("ComboBox" & n).Object.Value Then Exit For

Next n

If n = j + 1 And InStr(str & ",", "," & ar(i, n) & ",") = 0 Then

str = str & "," & ar(i, n)

End If

Next

Cmbo = Mid(str, 2)

End Function

最后:如果需要源文件,可以私信我

喜欢就关注一下,收藏一下,转发一下,就是给小编的支持!谢谢。

举报
评论 0