Error 385, “Need property-array index”, fires when code uses a property array as though it were a single value, omitting the index that selects an element. Properties such as a list control's List or Selected, and control arrays themselves, only exist element by element; there is no whole-array value to read, assign, or pass. The statement is usually one pair of parentheses short, which makes error 385 one of the fastest errors to fix once recognized, and one of the most confusing before, because the property name itself looks complete.
firstItem = lstOrders.List ' error 385: which element? firstItem = lstOrders.List(0) ' the property array, indexed count = lstOrders.ListCount ' the count is a separate property
ListCount (or the control-specific equivalent) and then index from 0 to count minus 1.If an index is visibly present and 385 still fires, the expression may be indexing the wrong thing: a property that returns a property array (a control's property that is itself indexed) needs both selections written out. Break the expression into steps with a variable per level and the missing level shows itself.
What is a property array? A property accessed with an index, like List(2) for the third item of a list control. Because the value lives per element, using the property without an index is meaningless, which is what error 385 reports.
How do I get all the elements at once? Loop from 0 to the count minus 1 and collect them, or use a bulk property if the control offers one. There is no single statement that returns a VBA property array as a whole.