Grundsätzlich würde ich das Thema anders anpacken.
Grund dafür ist das Dictionary bzw die .AddItem-Methode()
Jedes Mal, wenn Du mit dieser Methode einen Eintrag hinzufügst, wird intern umkopiert/gelöscht/hinzugefügt.
Mit Zunahme an Datensätzen, nehmen Zeit und Ressourcenbeanspruchung durch nachfolgende Formel zu. (Nagel mich jetzt nicht fest, aber Ich meine mich an n*((n/2)+1) zu erinnern.
Will sagen => zu viele Operationen => Laufzeitfehler #28 Stapelspeicher => deutet auf RAM hin
Nehmen wir mal an, Deine Dateistruktur ließe den Einsatz von "Datenbankobjekten" zu.
Genauer: Active Data Objects (kurz: ADO)
Noch genauer: ADO.Recordset
Mit dem Recordset fragen wir das Arbeitsblatt ab und halten die Daten in diesem Recordset-Object.
Das Recordsetobject verhält sich wesentlich schneller im Arbeitsspeicher als das Dictionary.
Ausserdem bietet Dir das Recordsetobject eine Filter-Eigenschfaft an, mit der Du, Ich sag mal, die Ergebnismenge filtern kannst.
Wenn nötig, je Spalte eine extra Filterbedingung.
Das Filtrat, bzw die gefilterte Ergebnismenge, lässt sich nun nach belieben weiterverwenden.
Beispiel: In Userform oder sonstigen Steuerelementen anzeigen... neues Arbeitsblatt erzeugen... als Email versenden.... als HTML oder XML output ....
Sollte Ich Dich komplett falsch verstanden haben und Du möchtest lediglich den Autofilter des Arbeitsblatts über die UserForm steuern können, ginge das Ebenfalls mit ADO oder dem Einsatz 2D-Arrays und der List-Eigenschaft() der Steuerelemente.
So oder so - weg von AddItem.... entweder Recordset oder Arrays.
Wenn Du Dein Projekt teilen möchtest, dann gerne über Dropbox o.ä.
Ansonste warte Ich jetzt mal auf Dein Feedback :)
|