Drop-down list loses its value (Outlook 2003)


Rod Behr

A drop-down box is assigned a list of values from an array:

Dim myArray(3, 1)
Set formPage = Item.GetInspector.ModifiedFormPages
Set ctrl = formPage("myForm").Controls("myControl")
myArray(0,0) = "Fred"
myArray(0,1) = 1
myArray(1,0) = "Jim"
myArray(1,1) = 2
myArray(2,0) = "Arnold"
myArray(2,1) = 3
ctrl.list = myArray

The control's list property is then set to the array. The control's bound
column is 2 (the integer value) and the number of columns is 1 to show the
string and not the integer value (primary key). The control is bound to a
user-defined field (myField).

Let's say I open the form, select "Arnold" and then close the form.

On re-opening, the drop-down control is blank (it's .list property is
correctly assigned, but it has no .value property). By unhiding the "All
Fields" form, I can see that the value of myField is 3, which is correct.

How do I go about getting the drop-down box to display "Arnold" when I
re-open the item?



Ken Slovak - [MVP - Outlook]

Set the value property in your form's opening code from the user property.

Rod Behr


Thanks for the response.

My background is in VBScript (Access and ASP), so my experience of Outlook
scripting is limited. Please could you expand on what you have written. How
would I go about doing this?


Ken Slovak - [MVP - Outlook]

Where is the code running that sets up the drop-down control? In that
procedure put in code something like this, assuming that your user property
is named "myField":

ctrl.list = myArray

Dim i 'As Integer

i = Item.UserProperties("myField")

ctrl.ListIndex = i - 1

Rod Behr

Hi Ken

Again, thank you. You are assuming that my list of values has an incremental
primary key, which is natural from the list I gave you. The primary key is
not incremental, so the ListIndex property won't work.

So let's say my list of values is:

Fred, 13
Jim, 4
Arnold, 54

These values are assigned to an array and the array assigned to the .list
property of myControl, which is a ComboBox. This all in the Item_Open()
function of the form.

When I use the form to enter an outlook item (it's a celendar item), the
ComboBox's .list property populates fine. I select Jim and myField's value is
correctly set to 4. I close the item.

When I open it again, myControl has no value. I use MsgBox to display the
value and get an error because the value is null. Another control
(myControl2), just a Text Box, not a ComboBox, correctly displays the value
of myField as 4, but try as I might I cannot assign the value 4 to the

When I attempt to set myControl's value as follows:

myControl.value = 4

I get the error, "Could not set the Value property. Invalid property value."


Thanks again for the help!



Ken Slovak - [MVP - Outlook]

You have to set the ListIndex property as I indicated. If the list is not
sequential then you must get the index that corresponds to the value in the
UserProperty and supply that to the ListIndex property. If you are adding
items to the list then the first item you add is index 0 and so on. You
would have to compare each item as you add it to match it to your user value
and then get your current index value to supply to the ListIndex property.


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