Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

makro sortieren über mehrere register
#1
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
Antworten Top
#2
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
Antworten Top
#3
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 Undecided

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!
Antworten Top
#4
Code:
Sub M_snb()
   with activesheet
     .usedrange.Sort .cells(1,2),,.cells(1,3),,,.cells(1,4),,1
   End With
End Sub
Antworten Top
#5
hallo snb,

funktioniert leider nicht Blush Laufzeitfehler 1004.

oder muss ich da noch was anpassen?

danke!
Antworten Top
#6
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
Antworten Top
#7
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
Antworten Top
#8
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)
Antworten Top
#9
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
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste