Toon posts:

[VBA] Selected items in listbox naar array

Pagina: 1
Acties:

Verwijderd

Topicstarter
[Vooraf even melden dat ik de search van GoT, gebruikt heb, msdn, tutorials over de listbox component e.d., maar niets dat me verder hielp]

Ik zit me suf te zoeken op het volgende (schijnbaar eenvoudig) probleem in VBA:
Bedoeling:
Ik heb een multiselect listbox en ik wil alle geselecteerde waarden uit de box in een array plaatsen.
Code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  Dim SiteArray() As String 'de dynamische array dus
        Dim checked As Integer 'counter hoeveel items zijn geselecteerd
        checked = 0
        Dim i As Integer
        For i = 0 To (ListBox3.ListCount - 1) 'loop over de listbox
            If ListBox3.Selected(i) Then 'tel het aantal geselecteerde items
                checked = checked + 1 'als het geselecteerd is counter + 1
            End If
        Next i
    If checked < 1 Then 'er moet zeker 1 geselecteerd zijn
        Err.Raise (94)
    Else
        ReDim SiteArray(1 To checked) 'zet de grootte v/d array op #geselecteerde items.
        For i = 0 To (ListBox3.ListCount - 1) 'tweede loop om alles in array te zetten
            If (ListBox3.Selected(i)) Then 'put SiteIDs in the array
                SiteArray(i + 1) = ListBox3.List(i)
            End If
        Next i
    End If

Probleem:
Als de eerste waarde in de lijst meegeselecteerd is, voert hij alles uit naar behoren. Enkel wanneer de eerste niet is geselecteerd, voert hij niets uit.
Ik hoop dat er nog ergens iemand wakker is ... :?

[ Voor 3% gewijzigd door Verwijderd op 31-12-2003 10:18 ]


Verwijderd

Topicstarter
Inmiddels gevonden dankzij een ander forum. (E-Programmeur.nl)
Oplossing voor de geïnteresseerden:
hier zit de fout:

For i = 0 To (ListBox3.ListCount - 1)
SiteArray(i + 1) = ListBox3.List(i)

als er bv maar 3 items geselecteerd (item1,item3,item6) zijn
en er zijn intotaal 8 items in listbox dan krijg je dit

ReDim SiteArray(1 To 3)
For i = 0 To (7)
If (ListBox3.Selected(i)) Then
SiteArray(i + 1) = ListBox3.List(i)
End If
Next i

1 is checked dit werkt perfect
3 werkt ook nog
6 niet meer want je wilt "7" op plaats 7 zetten in de array
en je hebt die maar gedimd tot 3

je gebruikt best deze code:

Dim SiteArray() As String
Dim checked As Integer
Dim i As Integer

For i = 0 To (Listbox3.ListCount - 1)
If Listbox3.Selected(i) Then
checked = checked + 1
End If
Next i

if checked < 1 then
err.raise(94)
else
ReDim SiteArray(1 To checked)
Dim iRange as integer
iRange = 1
For i = 0 To (Listbox3.ListCount - 1)
If (ListBox3.Selected(i)) Then
SiteArray(iRange) = Listbox3.List(i)
iRange = iRange + 1
End If
Next i
End if


deze zou het moeten doen
En doet het naar behoren! Damn zeg zo'n kleine bug en er maar overkijken ...