VBA動態聯動下拉組合框學習範例,想提高的速看

最終的演示效果:

VBA動態聯動下拉組合框學習範例,想提高的速看

演示效果

1、準備工作

根據自己工作的的實際情況,首先準備好數據。

2、添加組合框

點擊開發工具-插入-選擇ActiveX中的組合框控件,分別添加三個,組合框默認的名字分別是:ComboBox1,ComboBox2,ComboBox3,分別對應省,市,地區,然後自己排版一下控件的位置即可。

VBA動態聯動下拉組合框學習範例,想提高的速看

添加組合框

3、進入後臺編寫代碼

二種方式可以進去後臺

第一種方式:可以按組合鍵Alt+F11。

第二種方式:選擇開發工具-VisualBasic。

進入後臺後,雙擊左側ThisWorkbook,在右側寫入一以下代碼:

VBA動態聯動下拉組合框學習範例,想提高的速看

thisworkbook的代碼

然後再雙擊Sheet1(DropDown),這個DropDown就是你給表格命名的名字,這一步你根據自己的實際情況就行,你的數據在哪個表格,就雙擊進去,在右側代碼區域寫入以下代碼:

VBA動態聯動下拉組合框學習範例,想提高的速看

表格後臺代碼

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

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

喜歡就關注一下,收藏一下,轉發一下,就是給小編的支持!謝謝。


分享到:


相關文章: