Try this
It runs off Workbook_Open at present, though that's easily changed to what-ever you wish.
borrowed code from here: http://www.excelforum.com/excel-prog...-combobox.html
Private Sub Workbook_Open()
UserForm1.agent.Clear
Sheet1.Range("A1").AutoFilter
Call FillCombobox(Sheet1.Range("A2", Sheet1.Cells(Rows.Count, "A").End(xlUp)), UserForm1.agent)
UserForm1.Show
End Sub
------
Private Sub agent_Change()
UserForm1.vendor.Clear
If Sheet1.FilterMode = True Then: Sheet1.ShowAllData
Sheet1.Range("A1").AutoFilter field:=1, Criteria1:="=" & UserForm1.agent.Value
Call FillCombobox(Sheet1.Range("B2", Sheet1.Cells(Rows.Count, "B").End(xlUp)).SpecialCells(xlCellTypeVisible), UserForm1.vendor)
End Sub
-----------
Private Sub vendor_Change()
UserForm1.product.Clear
Sheet1.Range("A1").AutoFilter field:=2, Criteria1:="=" & UserForm1.vendor.Value
Sheet1.Range("A1").AutoFilter field:=3
Call FillCombobox(Sheet1.Range("C2", Sheet1.Cells(Rows.Count, "C").End(xlUp)).SpecialCells(xlCellTypeVisible), UserForm1.product)
End Sub
-----------
Private Sub product_Change()
UserForm1.subproduct.Clear
Sheet1.Range("A1").AutoFilter field:=3, Criteria1:="=" & UserForm1.product.Value
Call FillCombobox(Sheet1.Range("D2", Sheet1.Cells(Rows.Count, "D").End(xlUp)).SpecialCells(xlCellTypeVisible), UserForm1.subproduct)
End Sub
--------------
Sub FillCombobox(entRng As Range, cbox As Object)
Dim cllrng As Range
Dim toAdd As New Collection
Dim collItem
On Error Resume Next
For Each cllrng In entRng
toAdd.Add cllrng.Value, CStr(cllrng.Value)
Next cllrng
On Error GoTo 0
For Each collItem In toAdd
cbox.Object.AddItem collItem
Next collItem
End Sub
Bookmarks