Hej! Jag såg att felet låg i:For-satsen fungerar ej?
Jag sitter med ett program med två listboxar. När jag klickar på den första listboxen (motsv. lstList(iListIndex-1)) så skall den andra listboxen uppdateras.
Värdena som tillhandahålls finns lagrade i två arrayer, aRayKund1 och aRayKund2.
De är exakt lika stora, för att aRayKund2(50) tillhör aRayKund1(50).
Utöver detta kommer det finnas ytterligare en kategori (aRayKund3) och det är den enda listan som kommer ha unika värden medan aRayKund1 och 2 har flera likadana värden. Problemet ligger dock inte där..
Med den kod jag har nedan lyckas jag ta fram de unika värden i lstList(iListIndex), dvs andra listan, som finns i aRayKund1. Detta låter nog krångligare än vad det är.. :-(
Exempel på aRayKund1 | aRayKund2:
Ett | Hej
Ett | Hej
Två | Kossa
Ett | Mjölk
Så om jag klickar på Ett, så visas Hej och Mjölk i lista två.
Klickar jag på Två, så visas Kossa i lista två.
Problemet ligger i när jag väljer både Ett och Två. Då visar den enbart det jag klickade på senast i lista två. Så om jag markerar Två och sen Ett, så visas enbart Hej och Mjölk, men inte Kossa.
Det verkar som att den For-sats jag har avbryts.
sSearchFor är en array innehållande vad man har klickat på i lista ett, den fungerar när jag loopar igenom och visar vad man valt.
Min tanke är att för varje element i sSearchFor, loopa igenom lista 2 och kolla om texten redan finns där.. Om den finns där, avsluta For-satsen (det kanske är här det knasar? men då skulle inte If-satsen fungera som lägger till värdet senare) och gå vidare till If-satsen. Om den inte finns där, sätt bInside till False (boolean som håller ordning på om elementet existerar eller ej), och sedan ska If-satsen smita in där och lägga till.
Tänker jag helt knasigt, eller är jag förblindad av all kod? Det är lite krångligt, försök att ha överseende med att jag inte döpt variablerna så bra..
mvh
Christian
Private Sub Command5_Click()
Dim sSearchFor() As String
Dim j As Integer
Dim iListIndex As Integer
Dim i As Integer
Dim m As Integer
Dim bInside As Boolean
Dim iTop As Integer
iListIndex = 3
iTop = lstList(iListIndex - 1).SelCount
lstList(iListIndex).Clear
lstList(iListIndex).AddItem "*Alla"
If (iTop = 0) Or (lstList(iListIndex - 1).ListIndex = 0) Then
Call wrtKedja(3, aRayKund2)
Exit Sub
Else
m = 0
ReDim sSearchFor(iTop) As String
For i = 0 To (lstList(iListIndex - 1).ListCount - 1)
If lstList(iListIndex - 1).Selected(i) = True Then
'iSels(m) = i
sSearchFor(m) = lstList(iListIndex - 1).list(lstList(iListIndex - 1).ListIndex)
m = m + 1
End If
Next i
End If
For m = 0 To (UBound(sSearchFor) - 1)
For j = 0 To (UBound(aRayKund2) - 1)
If sSearchFor(m) = aRayKund1(j) Then
For i = 0 To (frmMain.lstList(iListIndex).ListCount - 1)
If frmMain.lstList(iListIndex).list(i) <> aRayKund2(j) Then
bInside = False
Else
bInside = True
Exit For
End If
Next i
If (aRayKund2(j) <> vbNullString) And Not (bInside) Then
frmMain.lstList(iListIndex).AddItem aRayKund2(j)
End If
End If
Next j
Next m
End SubSv: For-satsen fungerar ej?
If lstList(iListIndex - 1).Selected(i) = True Then
sSearchFor(m) = lstList(iListIndex - 1).list(lstList(iListIndex - 1).ListIndex)
m = m + 1
End If
Där det ska vara:
sSearchFor(m) = lstList(iListIndex - 1).list(i)
Tänk så tokigt det kan bli ibland *hämta kvasten för att sopa upp de avrivna hårstråna*