I think Collection may be what you are looking for.
Example:
Private Function getProducts(ByVal supplier As String) As Collection Dim getProducts_ As New Collection If supplier = "ACME" Then getProducts_.Add ("Anvil") getProducts_.Add ("Earthquake Pills") getProducts_.Add ("Dehydrated Boulders") getProducts_.Add ("Disintegrating Pistol") End If Set getProducts = getProducts_ Set getProducts_ = Nothing End Function Private Sub fillProducts() Dim products As Collection Set products = getProducts("ACME") For i = 1 To products.Count Sheets(1).Cells(i, 1).Value = products(i) Next i End Sub
Edit: Here is a fairly simple solution to the problem: populating the ComboBox for products whenever the ComboBox for suppliers changes the value with a minimum amount of vba.
Public Function getProducts(ByVal supplier As String) As Collection Dim getProducts_ As New Collection Dim numRows As Long Dim colProduct As Integer Dim colSupplier As Integer colProduct = 1 colSupplier = 2 numRows = Sheets(1).Cells(1, colProduct).CurrentRegion.Rows.Count For Each Row In Sheets(1).Range(Sheets(1).Cells(1, colProduct), Sheets(1).Cells(numRows, colSupplier)).Rows If supplier = Row.Cells(1, colSupplier) Then getProducts_.Add (Row.Cells(1, colProduct)) End If Next Row Set getProducts = getProducts_ Set getProducts_ = Nothing End Function Private Sub comboSupplier_Change() comboProducts.Clear For Each Product In getProducts(comboSupplier) comboProducts.AddItem (Product) Next Product End Sub
Notes: I named ComboBox for Suppliers comboSupplier and the one for comboProducts Products.
marg
source share