Jag vill undvika dubbleter i en listbox: Denna kod tar bort tomma rader i en listbox: Do Loop är at föredrar framför While Wend, vilket är en gammal kvarleva från basic. Ta bort "tomma" poster ifrån en listbox
<code>
Private Declare Function SendMessageFind Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal _
lParam As String) As Long
Const WM_USER = &H400
Const LB_ERR = (-1)
Const LB_FINDSTRING = &H18F
Dim Ret As Long
Dim a As String
Dim b As String
Dim c As String
'hoppar över lite kod här
a = strForfattare
b = strForfattare2
c = strForfattare3
List2.AddItem Rst("Sångtitel")
Ret = SendMessageFind(List3.hwnd, LB_FINDSTRING, 0, (a))
If Ret = LB_ERR Then
List3.AddItem strForfattare
End If
Ret = SendMessageFind(List3.hwnd, LB_FINDSTRING, 0, (b))
If Ret = LB_ERR Then
List3.AddItem strForfattare2
End If
Ret = SendMessageFind(List3.hwnd, LB_FINDSTRING, 0, (c))
If Ret = LB_ERR Then
List3.AddItem strForfattare3
End If
'sen blir det loop osv
</code>
Den här koden fungerar bra så till vida, att jag får inga dubbleter, men jag får därimot tomma poster i listboxen. Hur får jag bort dem?
Jag har försökt med:
<code>
List3.RemoveItem (List3.ListIndex)
</code>
men jag får bara error
Vad missar jag?Sv: Ta bort "tomma" poster ifrån en listbox
<code>
Dim i As Integer
While i < List3.ListCount
If List3.List(i) = "" Then
List3.RemoveItem i
Else
i = i + 1
End If
Wend
</code>Sv: Ta bort "tomma" poster ifrån en listbox
<code>
Do While i < List3.ListCount
If List3.List(i) = "" Then
List3.RemoveItem i
Else
i = i + 1
End If
Loop
</code>
En av fördelarna är att man kan hoppa ur en Do Loop med Exit Do.
Detta kan man inte i en While Wend.