Populating combo box with a function

D

Derek Gadd

Hi,

I want to use a function to populate some control form combo boxes on
a worksheet. However, I'm not sure how to pass the combo box name to
the function or even if this is the right approach. I suspect the line
where I define "MyCombo" is wrong but what should I have instead? My
code reads:

Sub xx()
MyCombo = Sheets("Entry sheet").ComboBox1

' Add unique items to dropdown box
Call FillCombo(MainCategory, MyCombo)
' etc

End Sub

And then my function:

Function FillCombo(Category As Collection, MyCombo As ComboBox)
Dim Item
With Sheets("Entry sheet").ComboBox1
.Clear
.AddItem "<All>"
For Each Item In Category
.AddItem Item
Next Item
.Text = "<All>"
End With
End Function
 
T

Tom Ogilvy

It looks OK. are you having problems? I added a few enrichments

Sub xx()
Dim MyCombo as MSForms.Combobox
MyCombo = Sheets("Entry sheet").ComboBox1

' Add unique items to dropdown box
Call FillCombo(MainCategory, MyCombo)
' etc

End Sub

And then my function:

Sub FillCombo(Category As Collection, MyCombo As MSForms.ComboBox)
Dim Item
With MyCombo
.Clear
.AddItem "<All>"
For Each Item In Category
.AddItem Item
Next Item
.Text = "<All>"
End With
End Sub

since you aren't returning a value, no need to make this a function


I assume the items in your category are strings.
 
D

Derek Gadd

Thanks Tom but the problem still occurs, namely the message:

Object variable or With block variable not set (Error 91)

It fails at the line:

MyCombo = Entry.ComboBox1

Prior to that line I have declared the variables etc with:

Dim MyCombo As MSForms.ComboBox
Dim Entry As Object
Set Entry = Sheets("Entry sheet")

Using MyCombo=Sheets("Entry sheet").ComboBox1 does not work either.
The combo box is on a sheet called "Entry sheet" and is from the
control toolbox.

Any ideas?
Thanks,
Derek
 
T

Tom Ogilvy

Sub xx()
Dim MyCombo as MSForms.Combobox
Dim Entry As Worksheet
set Entry = Worksheets("Entry Sheet")
Set MyCombo = Entry.ComboBox1 ' <= should be Set

' Add unique items to dropdown box
Call FillCombo(MainCategory, MyCombo)
' etc

End Sub

And then my function:

Sub FillCombo(Category As Collection, MyCombo As MSForms.ComboBox)
Dim Item
With MyCombo
.Clear
.AddItem "<All>"
For Each Item In Category
.AddItem Item
Next Item
.Text = "<All>"
End With
End Sub
 
P

Paul Robinson

Hi,
Set MyCombo = Entry.ComboBox1
as MyCombo is an object (it has properties and methods).
regards
Paul
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top