Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1412to1416
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

Sortieren, Range und meine Unfähigkeit

Sortieren, Range und meine Unfähigkeit
05.03.2015 20:47:48
P-Quest
Hallo,
ich plage mich gerade mit einer Sortierung ab und sthe mit der Syntax auf Kriegsfuß. Vielleicht kann mir jemand auf die Sprünge helfen?
Hier mein VBA Code
Sub DupsLoeschen()
'Löscht evtl. vorhandene Duplikate aus der Gesamtliste
'Es bleibt immer der ältere Eintrag erhalten
Dim rngGesamt As Range
Dim lastRow As Long                 'letzte Zeile vor dem Löschen
Dim lastRowNeu As Long              'letzte Zeile nach dem Löschen
Dim wsGesamt As Worksheet           'Tabellenblatt Gesamt
Set wsGesamt = ThisWorkbook.Sheets("Gesamtliste")
lastRow = wsGesamt.Cells(wsGesamt.Rows.Count, 1).End(xlUp).Row
With wsGesamt
Set rngGesamt = .Range(.Cells(1, 1), .Cells(lastRow, 11))
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range(Cells(2, 2), Cells(lastRow, 2)), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.Sort.SortFields.Add Key:=Range(Cells(2, 11), Cells(lastRow, 11)), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
End With
With ActiveSheet.Sort
.set Range:=rngGesamt
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
.rngGesamt.RemoveDuplicates Columns:=Array(2, 5, 6, 7), Header:=xlYes
End With
lastRowNeu = wsGesamt.Cells(wsGesamt.Rows.Count, 1).End(xlUp).Row
End Sub
Ich wollte es elegant machen und mit der Range arbeiten, aber scheinbar mögen wir uns nicht.
Gruß,
Peter

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortieren, Range und meine Unfähigkeit
05.03.2015 21:27:10
daniel
Ich würde mal sagen, da fehlt einfach nur ein Punkt.
Du musst das Sheet vor jeder Range angeben, auch bei denen, die innerhalb einer Funktion stehen.
Gruß Daniel

AW: Sortieren, Range und meine Unfähigkeit
05.03.2015 22:39:36
P-Quest
Der Fehler liegt in dieser Zeile:
.set Range:=rngGesamt
Egal was ich dort reinschreibe...Fehler :-(
Ich glaube da habe ich total verrissen.

AW: Sortieren, Range und meine Unfähigkeit
05.03.2015 22:44:50
daniel
Auf welchem Sheet willst du jetzt sortieren?
Auf dem ActiveSheet oder auf dem Sheet "Gesamt..."?
Da musst du schon konsequent bleiben.
Gruß Daniel

AW: Sortieren, Range und meine Unfähigkeit
05.03.2015 22:55:26
P-Quest
Das sheet Gesamt ist auch das ActiveSheet. Ursprünglich wollte ich die With Anweisungen verschachteln. Dabei habe ich mich wohl verirrt. Aber ich glaube ich sollte einfach mal eine Nacht drüber schlafen.

Anzeige
AW: Sortieren, Range und meine Unfähigkeit
06.03.2015 08:02:32
P-Quest
Daniel, wir hatten beide Recht. Ich damit, dass ich eine Nacht drüber schlafen sollte, du damit, dass man konsequent bleiben muss.
So sieht die funktionierende Lösung aus:
Sub DupsLoeschen()
'Löscht evtl. vorhandene Duplikate aus der Gesamtliste
'Es bleibt immer der ältere Eintrag erhalten
Dim rngGesamt As Range
Dim lastRow As Long                 'letzte Zeile vor dem Löschen
Dim lastRowNeu As Long              'letzte Zeile nach dem Löschen
Dim wsGesamt As Worksheet           'Tabellenblatt Gesamt
Set wsGesamt = ThisWorkbook.Sheets("Gesamtliste")
lastRow = wsGesamt.Cells(wsGesamt.Rows.Count, 1).End(xlUp).Row
Set rngGesamt = Range(Cells(1, 1), Cells(lastRow, 11))
With wsGesamt.Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Cells(2, 2), Cells(lastRow, 2)), SortOn:=xlSortOnValues,  _
Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.SortFields.Add Key:=Range(Cells(2, 11), Cells(lastRow, 11)), SortOn:=xlSortOnValues,  _
Order:=xlAscending, DataOption:=xlSortNormal
.SetRange rngGesamt
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
rngGesamt.RemoveDuplicates Columns:=Array(1, 2, 5, 6, 7), Header:=xlYes
lastRowNeu = wsGesamt.Cells(wsGesamt.Rows.Count, 1).End(xlUp).Row
End Sub
Man sollte schon seinen eigenen Deklarationen folgen und diese dann auch KONSEQUENT (nochmal danke für das Stichwort) einsetzen.
Gruß,
Peter
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige