Beispieldatei:
https://www.herber.de/bbs/user/170525.xlsm
Wie übergibt man einem Array dynamisch Anzahl und Inhalt der Werte für folgendes Beispiel?
Eine einfache Tabelle hat x Spalten.
Per VBA sollen alle Duplikate entfernt werden.
Das betrifft nur die Zeilen, die vollständig identisch sind, nicht einzelne Spalten, sondern wirklich über alle Spalten hinweg müssen zwei Zeilen identisch sein.
Per Makrorekorder habe ich prinzipiell folgenden Befehl erhalten.
.Range("Hier der Range Bereich").RemoveDuplicates Columns:=Array(1, 2, 3), Header:=xlYes
Der Teil in der Klammer von Range ist kein Problem, das dient hier nur zur Vervollständigung der Befehlszeile.
Dieses "Array(1, 2, 3)" macht mir (und Kollegen aus der VB Programmierung) Kopfzerbrechen.
Die x Spalten können in der Anzahl beliebig sein.
Daher muss der Teil in der Array Klammer dynamisch ermittelt werden, bloß wie?
In Kürze die bisherigen Versuche.
1. Eine Schleife, die ein zuvor dimensioniertes Array mit x Werten befüllt (z.B. arr(2) mit den Werten 1, 2, 3), wobei für die Werte Byte, Integer und Variant verwendet wurden, ist zwar an sich kein Problem, aber in der Befehlszeile wird arr anstatt Array(1, 2, 3) nicht akzeptiert (Fehlermeldung).
2. Nur ein Wert in der Array Klammer wird zwar akzeptiert, der Befehl wird auch ausgeführt, das Ergebnis ist aber nicht das gewünschte. Statt über alle x Spalten die Duplikate zu entfernen, gilt das nur für die Spalte entsprechend des Wertes in der Klammer.
3. Selbst folgendes geht nicht.
Dim MyArray
MyArray = Array(1, 2, 3)
Wenn man dann in der Befehlszeile Array(1, 2, 3) durch MyArray ersetzt, kommt wieder eine Fehlermeldung.
Im Lokalfenster haben die Werte des Arrays den Datentyp Variant/Integer. Erwartet wird der Array Bezeichner "ParamArray ArgList() As Variant", trotzdem wird auch hier die Ausführung mit Fehlermeldung verweigert.
4. Ebenfalls ohne Erfolg war folgender Versuch.
Dim MyArray(2) As Integer
MyArray(0) = 1
MyArray(1) = 2
MyArray(2) = 3
5. In die Array Klammer einen String schreiben und in Variant konvertieren, funktioniert auch nicht.
.Range("Hier der Range Bereich").RemoveDuplicates Columns:=Array(CVar("1, 2, 3")), Header:=xlYes
Ich weiß nicht mehr weiter.
Wer kann mir bitte sagen, wie ich dieses Problem lösen kann, sodass der Teil Array(1, 2, 3) beziehungsweise der Ausdruck in der Klammer dynamisch je nach Spaltenanzahl gesetzt wird oder dass ein dimensioniertes, befülltes Array in der Befehlszeile erkannt und akzeptiert wird?
Vielen Dank für jede Unterstützung!
Liebe Grüße!
Eric