Registriert seit: 26.07.2016
Version(en): 2010
Hallo zusammen,
ich habe eine Datei in der mehrere Register den gleichen Aufbau haben. In jedem dieser Register möchte ich einen Button einfügen über den automatisch neu sortiert wird nach den Spalten B, C und D. Da es sich um sehr viele Register handelt, möchte ich das Prozedere ungern für jedes Register mit dem Makrorecorder aufzeichnen und dann 30 Makros speichern. Gibt es eine Möglichkeit in einem Makro zu sagen, dass beim ausführen die Register 1,2,3,4.... sortiert werden sollen nach den Spalten B, C und D? In den Registern sind die Tabellen als "Tabelle" formatiert falls das noch wichtig ist!?
Vielen Dank und lieben Gruß Andrea
Registriert seit: 21.07.2016
Version(en): 2007
16.09.2016, 13:06
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2016, 13:37 von IchBinIch.
Bearbeitungsgrund: Codekorrektur
)
Hallo Andrea, so? Sub AlleTabellenSortieren() Dim b As Worksheet
For Each b In Worksheets With b b.Columns("B:D").Sort _ Key1:=.Range("B2"), Order1:=xlAscending, _ Key2:=.Range("C2"), Order2:=xlAscending, _ Key3:=.Range("D2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom End With
Next b
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media Code erstellt und getestet in Office 12 - mit VBAHTML 12.6.0 Gruß Ich
Registriert seit: 26.07.2016
Version(en): 2010
Hallo Ich ;) wenn ich das richte lese, dann werden so alle Register sortiert!? Es gibt in der Datei noch ein paar Register die nicht sortiert werden sollen  Würde ich in dem Teil: b.Columns( "B:C").Sort _ B:C einfach ersetzten mit A:AM (so viele Spalten haben meine Tabellen)? Danke!
Registriert seit: 29.09.2015
Version(en): 2030,5
16.09.2016, 13:19
(Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2016, 13:20 von snb.)
Code: Sub M_snb() with activesheet .usedrange.Sort .cells(1,2),,.cells(1,3),,,.cells(1,4),,1 End With End Sub
Registriert seit: 26.07.2016
Version(en): 2010
hallo snb, funktioniert leider nicht  Laufzeitfehler 1004. oder muss ich da noch was anpassen? danke!
Registriert seit: 21.07.2016
Version(en): 2007
Hallo Andrea, zunächst: Ich habe mich verschrieben. Korrekt müsste es heißen Code: b.Columns("B:D").Sort _
und ja es werden alle Tabellen sortiert. Mit meinem Code lassen sich maximal 3 Spalten sortieren. Gruß Ich
Registriert seit: 26.07.2016
Version(en): 2010
Ich hab mal selbst probiert - funktioniert natürlich nicht :22: Außerdem darf ja an der rot markierten stelle nicht der Tabellenname stehen sondern auch sowas wie "activesheet" um das Makro auf jedem Register auszuführen!?
Sub Sortieren() ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range("§19[Jahr]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range("§19[Name]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _ :=xlSortNormal ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range("§19[Vorname]"), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal With ActiveWorkbook.ActiveSheet.Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, wenn Du auf bestimmten Blättern sortieren willst, müsstest Du sie nach Deiner Programmierweise auch erst aktivieren. Oder Du machst das mit dem entsprechenden Blattnamen im Programm. Code: With Sheets("Tabelle1") .Range... End With
Wichtig ist dabei die Angabe des Punkte vor allen das Blatt betreffenden Bereichsangaben. Zudem ist der Paragraph falsch. In Zellformeln steht ein Dollar, der kommt aber im VBA nicht dazu.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 12.03.2016
Version(en): Excel 2003/ 2016
Hallo Andrea ich habe mal zwei Makro Varianten geschrieben und hoffe das beide gut funktionieren. İn den oberen Const Zeilen must du noch für sAdr1-3 deine Aressen festlegen, (End-Zeilen) sowie deinen Kopier Bereich von bis xxx. Im ersten Makro prüfe ich ob der Name "Tabelle" vorkommt, alle anderen Blaetter werden ignoriert. Im zweiten Makro kannst du selbst die gewünschten Tabellen namentlich selbst festlegen. Es sind vier, die "Or Zeile" kannst du ja selbst erweitern. Probier mal aus ob die Sortier Routine so wie gewünscht funktioniert. Würde mich freuen. mfg Gast 123 Code: Option Explicit '25.9.2016 Gast 123 Clever Forum
Const sAdr1 = "B1:B1000" 'Sortier Spalten Const sAdr2 = "C1:C1000" Const sAdr3 = "D1:D1000"
Const Bereich = "A1:F1000" 'Sortier Bereich
Sub Tabellen_Sortieren() Dim Blatt As String, k As Integer 'aktives Blatt merken (für Return) Blatt = ActiveSheet.Name
'Schleife für alle Tabellen sortieren For k = 1 To ThisWorkbook.Worksheets.Count 'nur Blaetter mit Namen "Tabelle" sortieren If InStr(Worksheets(k).Name, "Tabelle") Then Worksheets(k).Select ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range(sAdr1), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range(sAdr2), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:= _ Range(sAdr3), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal With ActiveWorkbook.ActiveSheet.Sort .SetRange.Range (Bereich) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If Next k 'zurück ins alte Blatt Worksheets(Blatt).Select End Sub
Sub Tabellen_Sortieren_Var2() Dim Blatt As String, Sht As String, k As Integer Blatt = ActiveSheet.Name 'merken für Return)
'Schleife für alle Tabellen sortieren For k = 1 To ThisWorkbook.Worksheets.Count Sht = Worksheets(k).Name 'zu sortierenede Tabellen selbst festlegen If Sht = "Tabelle1" Or Sht = "Tabelle2" Or _ Sht = "Tabelle3" Or Sht = "Tabelle4" Then 'sortieren ohne Worksheets Select !! ActiveWorkbook.Worksheets(k).Sort.SortFields.Clear ActiveWorkbook.Worksheets(k).Sort.SortFields.Add Key:= _ Range(sAdr1), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal ActiveWorkbook.Worksheets(k).Sort.SortFields.Add Key:= _ Range(sAdr2), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal ActiveWorkbook.Worksheets(k).Sort.SortFields.Add Key:= _ Range(sAdr3), SortOn:=xlSortOnValues, Order:=xlAscending, _ DataOption:=xlSortNormal With ActiveWorkbook.Worksheets(k).Sort .SetRange.Range (Bereich) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End If Next k End Sub
Registriert seit: 26.07.2016
Version(en): 2010
Hallo schauan und Gast 123,
vielen Dank für die Antworten!
@schauan,
der "§19" ist der Tabellenname. Die Tabellen in den Registern sind alle als Tabelle formatiert.
Ich möchte also §19, §20, §21 .... nach den Spalten "Jahr", "Name" und "Vorname" sortieren.
@Gast 123
vielen Dank! ich schau mal ob ich damit klar komme. Dadurch, dass ich die Tabellen in den Registern als Tabelle formatiert habe, hatte ich gehofft um die Angabe des Sortierbereiches herumzukommen. Die Tabellen werden täglich genutzt und erweitert, so dass der Bereich nicht eindeutig angegeben werden kann.
Liebe Grüße Andrea
|