Na ja, in den Foren passiert das ja oft, dass man so was vorgesetzt bekommt. Ich selbst nutze .AddItem kaum. Meist arbeite ich, wenn es Vorteile bringt mit Arrays.
Das Laden der Tabelle des TO würde ich so erschlagen:
Option Explicit
Private Const STARTZEILE As Long = 2
Private Ws As Worksheet, arrTab()
Private Sub UserForm_Initialize()
Dim i&
Set Ws = Sheets("Auditorenliste")
arrTab = Ws.Range("A1").CurrentRegion.Offset(STARTZEILE - 1, 0).Value
If UBound(arrTab) = 1 Then Exit Sub
If UBound(arrTab) = 2 Then
ReDim Preserve arrTab(1 To 2, 1 To UBound(arrTab, 2) + 1)
For i = UBound(arrTab, 2) To 2 Step -1
arrTab(1, i) = arrTab(1, i - 1)
Next i
arrTab(1, 1) = STARTZEILE
Else
arrTab = Application.Index(arrTab, Evaluate("row(1:" & UBound(arrTab, 1) & ")"), Array(1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
For i = 1 To UBound(arrTab)
arrTab(i, 1) = i + 1
Next i
End If
With ListBox1
.ColumnCount = UBound(arrTab, 2)
.ColumnWidths = "50; 100; 100; 250; 25; 25; 25; 25; 25; 25; 100"
.List = arrTab
.RemoveItem (.ListCount - 1)
End With
End Sub
@Max:
Ändern der Einträge ebenfalls in ein Array sammeln und das Array via Resize in die Tabelle zurückschreiben. Während des Sammelns ins Array gleich die Zeile der Listbox mit den Änderungen aktualisieren. Ebenso nach dem Löschen mit .RemoveItem (.ListIndex) aktualisieren.
Ein Beispiel was ich vor kurzem mal zusammengestellt hatte (allerdings zur Bearbeitung im Listobjekt) findest du hier:
Listbox bearbeiten via Array
Gruß Uwe
|