Listboxes come in numerous forms. If you are NOT looking up the data from a table, basically the non-table-source format uses semi-colons for separators of the displayed value list elements and a comma (if I remember correctly) to set apart the displayed value from the associated value to be stored once an entry is selected. So I propose an experiment for you.
On a dummy form, build a dummy listbox using the wizard. Let it ask you for a list of values. The wizard will ask you to enter what you want the listbox to say and what you want to store when someone selects that particular displayed value. Save the result. (Make more than one entry, just for giggles and to play with the syntax requirements.) Then in design mode, go back in and look at the properties of the list box for the DATA tab. For the recordsource, you will see the syntax used for your value choices. Since you yourself entered those choices and know what they were, you will get the hint as to what Access wants that to look like.
Issues to consider:
1. Building a string from your array - string concatenation is probably your best bet. Be careful to get the separators right. The "&" operator is going to be your friend here. Watch out for strings with embedded special characters, blanks, and punctuation. The pitfall isn't that these characters DON'T work; it is that you have to be more careful when you have tricky values. Access pays attention to some punctuation more critically than other punctuation. Quote-marks, for example. The ampersand for another.
2. Be careful in how you manage the value returned for the given displayed value from your list. Access won't care that you duplicate associated values, so if you don't store the value right, you won't get the right value back when you select the displayed value.
3. Be aware that you might run into a string size limit, but I'm not sure which of several limits apply.
simply setting up a listbox with a rowsource is not an option.
In any case, if you have more than ten values, you could be wrong to say that a table is not acceptable. If it is more than twenty, you ARE DEFINITELY, CATEGORICALLY wrong to reject a table as your listbox source. Rethink this carefully. If you come up with the same answer, think again. Because if you are going to build a big, whompin' non-tabular list, you are INVITING errors and limitations to creep in.
4. There is always more than one way to skin a cat. {MEEOOORRWWW!} Look into this alternative. When you are going to build your list for your listbox, do this.
a. Design the list to come from a table used for no other purpose than feeding this listbox. Set up required indexes so the listbox can be efficient. (And bear with me on this, despite your aversion to a table solution.)
b. When it is time to alter the table contents, ERASE the table.
c. Now open the table via a table-type recordset.
d. For each value you WOULD have added in string concatenation as I described above, instead do an AddNew on the recordset and put the individual string in the table along with its associated value.
Doing it the latter way means you have much larger limits on how many options you can enter for the listbox. It is now arbitrary and limited by the size of your disk's free space.
If your issue is that this is a shared DB, I understand why a table is not your preferred answer. But unless the DB is split into front-end/back-end, the non-table solution is no good, either.
Not only that, but if the form in question is in a shared DB, changing the contents of the non-tabular listbox requires you to allow your users to modify the design of the form. So then if they try to leave the form, they will be asked to save the modifications! Do you really want that? You will have one helluva time reconciling the divergent front-end DB segments if you have to update them in any way. Doing it via table is a lot simpler and does not require the right to modify a design. (You WERE considering the security aspect of this DB, were you not?)
And if it is NOT a split FE/BE case, users won't be ABLE to save in a shared environment unless they have Open Exclusive permissions AND they actually open the DB exclusively. So you will confuse your users and leave your DB in a shambling wreck very quickly in this case.