Do While i <= UBound(Array1D)
If InStr(1, Array1D(i), Expression, vbTextCompare) Then
If count <= 0 Or n < count _
Then n = n + 1
ElseIf n > 0 Then
Array1D(i - n) = Array1D(i) 'shift element up
End If
i = i + 1 'next element
Loop
If n > 0 Then
If LBound(Array1D) <= UBound(Array1D) - n Then
ReDim Preserve Array1D(LBound(Array1D) To UBound(Array1D) - n)
Else
Array1D = Split(Empty)
End If
End If
In der Do-Schleife wird im Array jedes einzelne Element untersucht, konkret wird geprüft ob darin der Ausdruck Expression vorkommt. Bei einem Treffer wird der Zähler n jedesmal um eins erhöht. Dieser Zähler gibt nachfolgend den Offset für einen Aufwärtsshift (Versatz) nachfolgender Elemente an. Optional kann für diesen Vorgang eine maximal zulässige Anzahl (Count) festgelegt werden.
Anschließend wird, wenn ein Aufwärtsshift stattfand, die größe des Arrays dementsprechend neu dimensioniert (oder im minimalfall, ein leeres Array, d.h. ohne Element erzeugt).
Wie der Name der Prozedur schon verrät, wird damit ein Element (oder mehrere) aus der Liste entfernt und alle übrigen Elemente werden dann nach oben verschoben.
PS: Nicht jeder Furz muss kommentiert werden, vorallem nicht wenn es aus dem Quellcode (z.B. Benennung von Variablen etc.) hervorgeht (was üblicherweise bei einem ~10 Zeile nunmal so ist).
Gruß
|