Listbox Werte in Array schreiben
Hallo zusammen,
ich möchte in einer Listbox in Spalte 3 ("ArtID") nach einem Wert suchen (z.B. 100007)
Dort wo der Wert vorkommt soll der Wert der Listbox aus Spalte 2 ("SetID") in einem Array gespeichtert werden.
Danach sollen alle Zeilen in der Listbox gelöscht werden, die NICHT einen der Werte aus dem Array in Spalte "SetID" (also Listindex 1) enthalten.
Leider gibt mir die Function IsInArray die Fehlermeldung "Laufzeitfehler 9: Index ausserhalb des gültigen Bereichs" aus
SuchID = 100007
Zähler = 2
For i = 1 to Listbox2.Listcount -1
if Listbox2.List(Zähler,3) ? SuchID then
'schreibe den Wert aus Spalte "SetID" in einen Array
'in diesem Beispiel müsste also im Array folgende Werte stehen: 100001 , 100008
End if
Next i
Listbox2
Index0 Index1 Index2
"lfdID" "SetID" "ArtID"
100000 100000
100001 100001 100007
100002 100001 100006
100003 100001 100000
100004 100001 100002
100005 100001 100002
100006 100001 100004
100007 100001 100005
100008 100008 100007
100009 100008 100006
100010 100008 100000
100011 100008 100002
100012 100008 100002
100013 100008 100004
100014 100008 100005
100015 100015 100007
100016 100015 100006
100017 100015 100000
100018 100015 100002
100019 100015 100002
100020 100015 100004
100021 100015 100005
Könnte mir jemand sagen, was falsch an der Function ist?
Danke
ich möchte in einer Listbox in Spalte 3 ("ArtID") nach einem Wert suchen (z.B. 100007)
Dort wo der Wert vorkommt soll der Wert der Listbox aus Spalte 2 ("SetID") in einem Array gespeichtert werden.
Danach sollen alle Zeilen in der Listbox gelöscht werden, die NICHT einen der Werte aus dem Array in Spalte "SetID" (also Listindex 1) enthalten.
Leider gibt mir die Function IsInArray die Fehlermeldung "Laufzeitfehler 9: Index ausserhalb des gültigen Bereichs" aus
SuchID = 100007
Zähler = 2
For i = 1 to Listbox2.Listcount -1
if Listbox2.List(Zähler,3) ? SuchID then
'schreibe den Wert aus Spalte "SetID" in einen Array
'in diesem Beispiel müsste also im Array folgende Werte stehen: 100001 , 100008
End if
Next i
Listbox2
Index0 Index1 Index2
"lfdID" "SetID" "ArtID"
100000 100000
100001 100001 100007
100002 100001 100006
100003 100001 100000
100004 100001 100002
100005 100001 100002
100006 100001 100004
100007 100001 100005
100008 100008 100007
100009 100008 100006
100010 100008 100000
100011 100008 100002
100012 100008 100002
100013 100008 100004
100014 100008 100005
100015 100015 100007
100016 100015 100006
100017 100015 100000
100018 100015 100002
100019 100015 100002
100020 100015 100004
100021 100015 100005
Private Sub CommandButton7_Click()
Set objLbxQuelle = uf.lbxArtikelBLVSu
Set objLbxZiel = uf.lbxArtikelBLV_Items
'lngArtID = "100007" 'objLbxZiel.List(objLbxZiel.ListIndex, 2) 'ArtNr
'Zähler = 2 'Anzahl der RückgabeEingabe
Dim SuchID As String
Dim Zähler As Integer
Dim WertArray() As String
Dim i As Long
Dim rowCount As Long
SuchID = "100007"
Zähler = 2
' Werte in Array speichern
For i = 1 To objLbxZiel.ListCount - 1
If objLbxZiel.List(i, 3) = SuchID Then
rowCount = rowCount + 1
ReDim Preserve WertArray(1 To rowCount)
WertArray(rowCount) = objLbxZiel.List(i, 1) ' Spalte "SetID"
End If
Next i
' Zeilen in objLbxZiel löschen, die nicht im Array enthalten sind
For i = objLbxZiel.ListCount - 1 To 1 Step -1
If Not IsInArray(objLbxZiel.List(i, 1), WertArray) Then
objLbxZiel.RemoveItem i
End If
Next i
End Sub
' Hilfsfunktion, um zu überprüfen, ob ein Wert in einem Array vorhanden ist
Function IsInArray(ByVal searchValue As Variant, ByVal searchArray As Variant) As Boolean
If Not IsEmpty(searchArray) Then
Dim i As Long
For i = 1 To UBound(searchArray, 1)
If searchArray(i, 1) = searchValue Then
IsInArray = True
Exit Function
End If
Next i
End If
IsInArray = False
End Function
Könnte mir jemand sagen, was falsch an der Function ist?
Danke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 7614828491
Url: https://administrator.de/contentid/7614828491
Ausgedruckt am: 21.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar
Hi,
Du könntest dir ein ObservableCollection-Object erstellen und dieses verwenden. Der große Vorteil ist, dass du die Daten nur noch dort bearbeiten musst und die Listbox wird automatisch aktualisiert wenn die ObservableCollection als DataSource hinterlegt ist.
Siehe dazu:
https://learn-powershell.net/2012/12/08/powershell-and-wpf-listbox-part- ....
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-create- ...
Grüße!
Du könntest dir ein ObservableCollection-Object erstellen und dieses verwenden. Der große Vorteil ist, dass du die Daten nur noch dort bearbeiten musst und die Listbox wird automatisch aktualisiert wenn die ObservableCollection als DataSource hinterlegt ist.
Siehe dazu:
https://learn-powershell.net/2012/12/08/powershell-and-wpf-listbox-part- ....
https://learn.microsoft.com/en-us/dotnet/desktop/wpf/data/how-to-create- ...
Grüße!
Wohl noch kein Kaffee gehabt . Schau nochmal genau hin, du erstellst ein eindimensionales Array benutzt es aber wie ein zweidimensionales ...
Mit Breakpoints setzen und untersuchen der Variablen wäre dir das auch aufgefallen.
Zeppel
Mit Breakpoints setzen und untersuchen der Variablen wäre dir das auch aufgefallen.
Zeppel
Hey, mal jemand der sich mit einem Hinweis auch selbst helfen kann 👍, ist hier ja eine seltene Spezies.😉