Bereiche sauber referenzieren
03.06.2013 07:39:50
Erich
Hi zusammen,
je nachdem, wo die bisher hier geposteten Codes stehen, können sie im Fehler enden.
Grund ist die evtl. unpassende Angabe zweier Bereiche. Bei
ActiveSheet.Sort.SortFields.Add Key:=Range("A2:A2000"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
soll ein Bereich im aktiven Blatt sortiert werden.
Als Key ist aber Range("A2:A2000") angegeben - ohne Bezug zum aktiven Blatt.
Wenn der Code im Modul eines Tabellenblatts gehört (etwa in einer Ereignisprozedur), gehört Range("A2:A2000")
zu diesem Blatt - und das muss ja nicht das aktive Blatt sein.
Auch bei der Angabe '.SetRange Range("A1:M2000")' fehlt die Angabe des Tabellenblatts.
Hier zwei Vorschläge (in denen die Punkte vor Range wesentlich sind):
Sub AZSortierung2()
' Application.ScreenUpdating = False 'nach dem Test aktivieren
With ActiveSheet
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=.Range("A2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SetRange .Range("A1:D10")
With .Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End With
Application.ScreenUpdating = True
End Sub
Sub AZSortierung1()
' Application.ScreenUpdating = False 'nach dem Test aktivieren
With ActiveSheet
.Sort.SortFields.Clear
' .Sort.SortFields.Add Key:=.Range("A2:A10"), ...
.Sort.SortFields.Add Key:=.Range("A2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
With .Sort
.SetRange ActiveSheet.Range("A1:D10")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
' .SortMethod = xlPinYin ' interessiert hier wohl weniger
.Apply
End With
' .Range("A1").Select ' wofür?
End With
Application.ScreenUpdating = True
End Sub
Dabei erhielte AZSortierung2 bei mir den Vorzug.
Noch eins: Statt
.Sort.SortFields.Add Key:=.Range("A2:A10")
reicht es aus zu schreiben:
.Sort.SortFields.Add Key:=.Range("A2")
oder
.Sort.SortFields.Add Key:=.Cells(2, 1)
Das kam zwar alles aus der Makroaufzeichnung - aber der dabei generierte Code hat seine Mängel...
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich