VBA Duplikate löschen

Bild

Betrifft: VBA Duplikate löschen
von: WalterK
Geschrieben am: 21.09.2015 19:23:28

Hallo,
Der nachfolgende Code sollte 10mal durch laufen. Er funktioniert allerdings nur 1 mal. Beim 2. kommt die Meldung: Anwendungs- und objektdefinierter Fehler
Mit dem Code will ich in den Spalten 1:10 ab Zeile 3 die Duplikate löschen.

Option Explicit
Sub DupWegMitAllgModul()
    Dim wksTemp1 As Worksheet
    Dim i As Long
    Set wksTemp1 = Worksheets("Temp1")
    For i = 1 To 10
    wksTemp1.Range(Cells(3, i), Cells(100, i)).RemoveDuplicates Columns:=i, Header:=xlNo 'Ü _
berschrift in Zeile 2, Daten ab Zeile 3
    Next i
End Sub
Danke für die Hilfe und Servus, Walter

Bild

Betrifft: AW: VBA Duplikate löschen
von: Daniel
Geschrieben am: 21.09.2015 19:43:02
Hi
beim RemoveDuplicates ist das Columns nicht die absolute Spaltennummer aus der Exceltabelle, sondern die relative Spaltennummer bezogen auf den Bereich, den du zuvor angegeben hast.
dh wenn da steht: Columns:=1, dann heißt das nicht: "wlsTemp1.Spalte A", sondern "die erste Spalte von wksTemp1.Range(Cells(3, i), Cells(100, i))"
da dein Zellbereich immer nur eine Spalte breit ist, lautete der Code immer Columns:=1
kleiner Tip noch am rande:
Zellbezüge wie Range, Cells, Columns, Rows ohne eine Tabellenblattangabe davor beziehen sich immer auf das aktive Tabellenblatt.
Das gilt auch, wenn diese Zellbezüge innerhalb von Funktionen stehen, wie bei Range(Cells(), Cells())
Dein wksTemp1.Range(Cells(3, i), Cells(100, i)) wird daher immer einen Fehler verursachen, wenn nicht wksTemp1 gerade zufällig das aktive Blatt ist.
Besser ist so:
Range(wksTemp1.Cells(3, i), wksTemp1.Cells(100, i))
noch besser ist:
wksTemp1.Cells(3, i).Resize(98, 1)
das gilt, wenn der Code in einem alllgemeinen Modul steht.
steht der Code jedoch in einem Tabellenblattmodul, dann beziehen sich Zellbezüge ohne Tabellenblattangabe immer auf das Blatt des Moduls und man muss bei Range(Cells(), Cells()) das Tabellenblatt nicht nur vor den beiden Cells, sondern auch vor der Range angeben:
wksTemp1.Range(wksTemp1.Cells(3, i), wksTemp1.Cells(100, i))
Gruß Daniel

Bild

Betrifft: AW: VBA Duplikate löschen
von: WalterK
Geschrieben am: 21.09.2015 19:48:09
Hallo Daniel,
habe gerade selbst heraus gefunden wo es hackt.
Ich danke Dir jedenfalls für die detaillierten Ausführungen.
Servus, Walter

Bild

Betrifft: Frage hat sich erledigt. Servus, Walter o.T.
von: WalterK
Geschrieben am: 21.09.2015 19:43:16


 Bild

Beiträge aus den Excel-Beispielen zum Thema "VBA Duplikate löschen"