• 2

VBA 連動下拉式選單設定

請問連動式下拉式選單該如何製作,如圖檔例如;當ComBoBox1選擇A1時,則ComBoBox2下拉選單則會變成工作表2 A2欄位下方人員名稱小明1,小明2....,當我選擇B1時ComBoBox2下拉選單又會變成大明1,大明2....以此類推,請問是否有人可以幫小弟解答..謝謝!!
2019-08-23 13:33 發佈
連動下拉式選單是不需要用到vba來處理的啊!
是有特殊用途嗎?



試試

Private Sub ComboBox1_Change()
Dim a As Range
Dim m, l As Integer

ComboBox2.Clear

m = Application.Match(ComboBox1.Text, Range("Sheet1!A1:D1"), 0)
l = Application.CountA(Columns(m))

For Each a In Range(Cells(2, m), Cells(l, m))
ComboBox2.AddItem a
Next
End Sub

Private Sub UserForm_Initialize()
Dim a As Range

For Each a In Range("Sheet1!A1:D1")
ComboBox1.AddItem a
Next
End Sub
因為最近對VBA介面設計非常喜歡,想所試看看能否使用VBA製作連動下拉清點,不過因上網找了所以介紹都只有單1下拉設計,然後自己怎麼寫都只能啟用單方設定,但真的非常感謝你..另外想問一下是否有推薦的VBA設計適合剛入門想學習的書籍嗎,我上網找了很多但不清楚那種比較合適
不用迴圈加資料的方法,請參考

Private Sub ComboBox1_Change()

Dim Lastrow As Integer
If ComboBox1.ListIndex > -1 Then
ComboBox2.Clear
Lastrow = Sheets("工作表1").Columns(ComboBox1.ListIndex + 1).End(xlDown).Row - 1
ComboBox2.List = Sheets("工作表1").Range("a2").Resize(Lastrow, 1).Offset(, ComboBox1.ListIndex).Value
End If

End Sub

Private Sub UserForm_Initialize()

ComboBox1.List = Application.Transpose(Sheets("工作表1").Range("a1:d1").Value)

End Sub
請問一下如果我姓名內容儲存格不是從A2開始的話(如圖檔),下方要改那裡才可以跟著改變範圍位置,因為我有試著修改很多地方但改姓名內容就會變的不會顯示所有名單,所以請問以下文法要改那裡才可以改變姓名內容範圍,另外假如我班別部份如果要在增加的話要如何修改才會加大範圍..謝謝!!

Private Sub ComboBox1_Change()

Dim Lastrow As Integer
If ComboBox1.ListIndex > -1 Then
ComboBox2.Clear
Lastrow = Sheets("工作表1").Columns(ComboBox1.ListIndex + 1).End(xlDown).Row - 1
ComboBox2.List = Sheets("工作表1").Range("a2").Resize(Lastrow, 1).Offset(, ComboBox1.ListIndex).Value
End If

End Sub
風城小方 worte:
如何修改才會加大範圍...(恕刪)


Private Sub ComboBox1_Change()

Dim Lastrow As Integer
If ComboBox1.ListIndex > -1 Then
Lastrow = Sheets("工作表1").Columns(ComboBox1.ListIndex + 3).End(xlDown).Row - 1
'出現資料的第一個欄位號碼
ComboBox2.List = Sheets("工作表1").Range("c2").Resize(Lastrow, 1).Offset(, ComboBox1.ListIndex).Value
'出現資料的第一個不含標題的儲存格名稱
ComboBox2.ListIndex = 0
End If

End Sub

Private Sub UserForm_Initialize()

ComboBox1.List = Application.Transpose(Sheets("工作表1").Range("c1:f1").Value)
'欄位範圍
ComboBox1.ListIndex = 0

End Sub
牛小傑 wrote:


想請教牛小傑,
我跟著步驟輸入但有點卡關,因為會抓到不同工作表的資料,
因此想請問在"For Each a In Range(Cells(2, m), Cells(l, m))"要怎麼輸入限定某個工作表呢?
我把我改寫跟需要請您幫忙的部分標記在下面,
謝謝。

Dim a As Range
Dim m, l As Integer

CBCsecond.Clear

m = Application.Match(CBCfirst.Text, Sheets("會計表單").Range("A1:I1"), 0)
l = Application.CountA(Columns(m))

For Each a In Range(Cells(2, m), Cells(l, m))
CBCsecond.AddItem a
Next

End Sub

Private Sub UserForm_Activate()

Dim a As Range
For Each a In Sheets("會計表單").Range("A1:I1")
CBCfirst.AddItem a
Next

End Sub


flyagnel wrote:
想請教牛小傑,
Zi Jie Yu wrote:
(恕刪)


太感謝您的回應了!!
不過應該是我整個程式碼有還有寫錯的地方,測試之後發現問題包括
1.選取"100-收入"時,偵錯程式碼為For Each a In .Range(.Cells(2, m), .Cells(l, m))
2.選取CBCfirst下拉式選單其他選項時,CBCsecond下拉式選單無法完整跑出下面的資料。

我將我完整的程式碼及工作表單列在下面,


Private Sub CBCfirst_Change()

Dim a As Range
Dim m, l As Integer

CBCsecond.Clear

m = Application.Match(CBCfirst.Text, Sheets("會計表單").Range("A1:I1"), 0)
l = Application.CountA(Columns(m))

With Sheets("會計表單")
For Each a In .Range(.Cells(2, m), .Cells(l, m))
CBCsecond.AddItem a
Next
End With

End Sub

Private Sub UserForm_Activate()

Dim a As Range
For Each a In Sheets("會計表單").Range("A1:I1")
CBCfirst.AddItem a
Next

End Sub

非常感謝您的幫忙!!
方便給我.xlsm 檔? 只要 Sheets("會計表單") 及 這 UserForm,我幫你看一下!

flyagnel wrote:
太感謝您的回應了!!...(恕刪)
  • 2
限制級
您即將進入之討論頁 需滿18歲 方可瀏覽。
根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於該限制級網頁,依台灣網站分級推廣基金會規定作標示。
評分
複製連結