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

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

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

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige