Ich habe ein großes Problem beim Löschen von Daten aus einer Listbox mit mehr als 10 Spalten.
Folgende Ausgangssituation:
Ich habe eine Tabelle mit den Spalten A:N (wobei N nur als ColumnCount dient damit man weiß was zu löschen ist)
Jetzt habe ich in meiner ersten Listbox wo ich nur lösche einfach nur die wichtigsten Daten genommen und somit nur 9 Spalten - hier klappt das Löschen einfach mit folgendem Code
With ListBox1
For i = .ListCount - 1 To 0 Step -1
If .Selected(i) And cb_site.Value = "KLM" Then
list1 = .List(i, .columncount - 1)
Sheets("KLM").Rows(list1).Delete
.RemoveItem i
ElseIf .Selected(i) And cb_site.Value = "VIH" Then
Sheets("VIH").Rows(.List(i, .columncount - 1)).Delete
.RemoveItem i
ElseIf .Selected(i) And cb_site.Value = "RBG" Then
Sheets("RBG").Rows(.List(i, .columncount - 1)).Delete
.RemoveItem i
End If
Next
End With
Jetzt habe ich eine Anwendung die ein Update ausführt. Für diesen Fall habe ich auch eigentlich eine Lösung die auch bei einem früheren Sheet funktioniert hat das aber weniger als 10 Spalten hat. Im Allgemeinen brauche ich hier alle Spalten da ich wenn man die Listbox anklickt diese auch in diverse Comboboxen und TextBoxen laden lasse. Jetzt habe ich es geschafft das mir die Listbox befüllt wird mithilfe eines Arrays.
Private Sub cb_datasource_Change()
'This method you need to fill the ListBox - it needs to be actual after every change in the _
ComboBox_ServerName
Dim i As Long, k As Long, m As Long
Dim arr As Variant
Dim arrOut() As Variant
Dim blnGefunden As Boolean
If cb_datasource.Value = "" Then Exit Sub
With Sheets("KLM")
arr = .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, 15)).Value
End With
ListBox_Update.Clear
ListBox_Update.columncount = UBound(arr, 2)
For i = 1 To UBound(arr)
For k = 1 To UBound(arr, 2)
If InStr(arr(i, k), cb_datasource.Value) > 0 Then
blnGefunden = True
Exit For
End If
Next k
If blnGefunden Then
m = m + 1
ReDim Preserve arrOut(1 To UBound(arr, 2), 1 To m)
For k = 1 To UBound(arr, 2)
arrOut(k, m) = arr(i, k)
Next
blnGefunden = False
End If
Next i
If m 0 Then ListBox_Update.Column = arrOut
End Sub
Nun habe ich einmal für eine meiner Auswahlen den Code für das löschen geschrieben aber hier habe ich das Problem das er mir in list1 nichts reinschreibt. Ich befürchte das hat etwas zu tun damit das es mehr als 10 Spalten sind aber ich komm hier einfach nicht weiter.
With ListBox_Update
For x = .ListCount - 1 To 0 Step -1
If .Selected(x) Then
list1 = .List(x, .columncount - 1)
Sheets("Sheet2").Rows(list1).Delete
itemdelete = x
End If
Next
End With
Er schreibt mir Werte in x und columncount rein aber am Ende ist list1 "Empty" - da es bei allen meinen anderen Delete-Methoden klappt habe ich die Befürchtung das es etwas mit den mehr als 10 Spalten zu tun hat.
Hat jemand von euch vlt eine Idee? Ich freue mich über jede Hilfe - ärgere mich schon seit letzter Woche darüber das es einfach nicht funktionieren will.