Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Code ändern auf Active Worksheet

Code ändern auf Active Worksheet
02.06.2013 10:37:09
rieckmann
Hallo Leute,
ich habe hier ein Makro aufgezeichnet.
Möchte dieser aber auch auf andere Tabellenblätter benutzen.
Das geht doch mit "Active Worksheet", oder ?
Ich bekomme das aber nicht hin !
Wenn ich alle "Worksheets("BM Hamburg")" mit "Active Worksheet" ersetze,
bekomme ich Fehler bei "Add Key" !
Kann mir jemand den Code abändern ?
Gruß
Fred
Sub AZSortierung()
Application.ScreenUpdating = False
Cells.Select
ActiveWorkbook.Worksheets("BM Hamburg").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("BM Hamburg").Sort.SortFields.Add Key:=Range( _
"A2:A2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("BM Hamburg").Sort
.SetRange Range("A1:M2000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Application.ScreenUpdating = True
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code ändern auf Active Worksheet
02.06.2013 11:03:40
Armin
Hallo Fred,
das "ActiveWorkbook" brauchst Du nicht zwingend, nur wenn ein weiteres Sheet offen sein muss.
Sub AZSortierung()
Application.ScreenUpdating = False
Worksheets(ActiveSheet.Name).Sort.SortFields.Clear
Worksheets(ActiveSheet.Name).Sort.SortFields.Add Key:=Range( _
"A2:A2000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With Worksheets(ActiveSheet.Name).Sort
.SetRange Range("A1:M2000")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("A1").Select
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Code ändern auf Active Worksheet
02.06.2013 11:07:35
rieckmann
Hallo Armin,
super ich danke dir.
Schönen Sonntag noch.
Gruß
Fred

ist das nicht doppelt gemoppelt ?
02.06.2013 12:17:10
Matthias
Hallo
Worksheets(ActiveSheet.Name).Sort ...
ActiveSheet.Sort ...
Gruß Matthias

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
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige