Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1448to1452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Duplikate löschen

VBA Duplikate löschen
21.09.2015 19:23:28
WalterK
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

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Duplikate löschen
21.09.2015 19:43:02
Daniel
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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige