By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
458,050 Members | 1,148 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 458,050 IT Pros & Developers. It's quick & easy.

multiselect listbox to array

P: 58
Hey all, newbie to vb here. I've created a listbox (called lst_county) that gets populated from a Select * From Table in Oracle on load. I've set the MultiSelect to 2 -Extended. I've got some code that sends out the select rows from lst_country to a msgbox (all working fine). What i need to do now is to actually put those selected rows into an array that I can later parse into another Select * From Table Where < selected lst_country (i,0)> = some value or < selected lst_country (i,0)> = some value , etc until all selected rows have been parsed.
So can anyone at least help me take the selected values and put them into an array.
Here is my msgbox code.

Expand|Select|Wrap|Line Numbers
  1. Public Function lstbox_array()
  2.  
  3.     Dim i As Long
  4.     Dim Msg As String
  5.  
  6.     With frm1.lst_country
  7.         For i = 0 To frm1.lst_country.ListCount - 1
  8.             If .Selected(i) Then
  9.                 Msg = Msg & frm1.lst_country.List(i) & vbCrLf
  10.             End If
  11.         Next i
  12.     End With
  13.  
  14.     If Len(Msg) = 0 Then
  15.         Msg = “No items selected”
  16.     End If
  17.  
  18.     MsgBox Msg
  19.  
  20. End Function
and here is my first attempt

Expand|Select|Wrap|Line Numbers
  1. Public Function lstbox_array()
  2.  
  3. Dim i As Long
  4. Dim Msg As String
  5. 'Dim listArray()
  6. 'Dim j As Long
  7. 'Dim vArray
  8. 'ReDim listArray(1 To frm1.lst_country.ListCount, 1 To 1)
  9.  
  10.     With frm1.lst_country
  11.         For i = 0 To frm1.lst_country.ListCount - 1
  12.             If frm1.lst_country.Selected(i) Then
  13.                 Msg = Msg & Left(frm1.lst_country.List(i), 3) & vbCrLf
  14.                 'j = j + 1: listArray(j, 1) = frm1.lst_country.List(i, 1)
  15.                 'vArray(i) = frm1.lst_country.List(i, 1)
  16.                 'listArray(i, 0) = Left(frm1.lst_country.List(i), 3)
  17.             End If
  18.         Next i
  19.     End With
  20.  
  21.     If Len(Msg) = 0 Then
  22.         Msg = "No items selected"
  23.     End If
  24. 'Debug.Print listArray(i)
  25.     MsgBox Msg
  26.  
  27. End Function
you'll notice alot of commented out code and that just cause I keep trying different things and see them fail..

i figure once i can get the selected items into a new array, it shouldn't be too much of a problem to parse through those and add them to the SQL WHERE statements.
Thank immensely ahead of time for anyone's help and or direction.
Cheers,
Eric
Jul 29 '08 #1
Share this Question
Share on Google+
5 Replies


Expert 100+
P: 112
This may not be the best way but the way I would approach this would be:
1. For basic looping through the listbox
Expand|Select|Wrap|Line Numbers
  1. dim var as variant
  2. for each var in listbox.ItemsSelected
  3.      msgbox listbox.ItemData(var)
  4. next var
  5.  
It wouldn't be too much of a stretch to convert that to an array if you wanted to:
Expand|Select|Wrap|Line Numbers
  1. dim var as variant
  2. dim n as integer
  3. redim varArr(listbox.listcount-1)
  4. for each var in listbox.ItemsSelected
  5.    varArr(n) = listbox.ItemData(var)
  6.     n = n + 1
  7. next var
  8.  
This is one way to do it any how
Jul 29 '08 #2

P: 58
I guess I need to learn more about arrays before continuing here.
When I try your first bit of code (after changing .ItemsSelected to just .Selected As I was getting a Compile error: Method or data member not found)

Expand|Select|Wrap|Line Numbers
  1. Dim var As Variant
  2.     For Each var In frm1.lst_country.Selected
  3.         MsgBox frm1.lst_country.ItemData(var)
  4.     Next var
  5.  
i get a Compile error: Argument not optional and it highlights line 2.

same with the second bit of code you posted if i changed it to this
Expand|Select|Wrap|Line Numbers
  1. Dim var As Variant
  2. Dim n As Integer
  3. ReDim varArr(frm1.lst_country.ListCount - 1)
  4. For Each var In frm1.lst_country.Selected
  5.    varArr(n) = frm1.lst_country.ItemData(var)
  6.     n = n + 1
  7. Next var
  8.  
again it highlights line 4 and gives me the same error, so there is something with the Selected argument that is not working and confusing me.
Jul 30 '08 #3

Expert 100+
P: 112
I should have maybe asked some preliminary questions, sorry about that. What version of vb are you using?
Jul 30 '08 #4

P: 58
I managed to get it sorted out... after reading more about arrays.
here is what I did

Expand|Select|Wrap|Line Numbers
  1. Dim i As Integer
  2. Dim MyArray() As String
  3. Dim n As Integer
  4.  
  5. ReDim MyArray(frm1.lst_country.ListCount)
  6.  
  7.     If frm1.lst_country.ListIndex = -1 Then
  8.         MsgBox "You didn't select any Countries"
  9.     End If
  10.     For i = 0 To frm1.lst_country.ListCount - 1
  11.         If frm1.lst_country.Selected(i) = True Then
  12.             MyArray(n) = Left(frm1.lst_country.List(i), 3)
  13.             n = n + 1
  14.         End If
  15.     Next i
  16.  
  17. ReDim Preserve MyArray(n - 1)
  18.  
I really appreciated your replies and code snippets!
Thanks
Eric
ps I will be sure to note next time I am working in VB6
Jul 30 '08 #5

Expert 100+
P: 112
Glad you got it figured out, and glad to help. For whatever it's worth the code I first supplied was for Access vba, which uses a different listbox object than does forms 2.0 (the library containing the listbox object in vb6 and vba for the other office products). I believe that is why the method was missing.
Jul 30 '08 #6

Post your reply

Sign in to post your reply or Sign up for a free account.