Hallo,
ich habe eine Datei A (Hauptdatei), in der die Datensätze aufgenommen werden.
Die zweite Datei B zieht sich aus der ersten Datei A nur ganz bestimmte Datensätze raus, die dann beim Öffnen der einzelnen Blätter automatisch nach Name sortiert werden.
Makro hierfür: Blattschutz aufheben, Sortieren, Blattschutz aktivieren.
Nun möchte ich aber es so einrichten, dass beim Öffnen der Datei B die einzelnen Blätter der Reihe nach selbständig geöffnet werden (wegen Sortierung) und anschließend zum ersten Blatt wieder zurückkehren.
Habe es mit Makro in Makro aufzeichnen probiert, funktioniert leider nicht.
Unter anderem habe ich folgende – nicht funktionierende - Makroaufzeichnung probiert:
auf Blatt 1 geklickt, Makro „Sortieren“ ausgeführt,
auf Blatt 2 geklickt, Makro „Sortieren“ ausgeführt, usw.,
anschließend wieder auf Blatt 1 geklickt.
Das Ergebnis war: Es wurde lediglich „Gehe zu Blatt 1“ aufgezeichnet.
Bin für jeden Tipp dankbar
Gruß Lena
Makro hierfür: Blattschutz aufheben, Sortieren, Blattschutz aktivieren.
Hallo Lena,
ich hoffe Dir ist mit diesem Makro gedient
Private Sub Workbook\_Open()
Call SortDataInWorkbook
End Sub
Für Tabellen mit Spaltenbeschriftung
Private Sub SortDataInWorkbook()
For Each objSheet In Worksheets
With objSheet
.Activate
.Protect Contents:=False
Range(Cells(1, 1), \_
Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Sort \_
Key1:=.Columns(1), \_
Header:=xlGuess
Range("A1").Select
.Protect Contents:=True
End With
Next
Worksheets(1).Activate
End Sub
Für Tabellen ohne Spaltenbeschriftung
Private Sub SortDataInWorkbook()
For Each objSheet In Worksheets
With objSheet
.Activate
.Protect Contents:=False
Range(Cells(1, 1), \_
Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Sort \_
Key1:=.Columns(1)
Range("A1").Select
.Protect Contents:=True
End With
Next
Worksheets(1).Activate
End Sub
Der Wert Key1:=.Columns(1) gibt die zu sortierende Spalte an (Du kannst auch Key1:=.Columns(„A“) nehmen), wenn Du weitere Sortierungen benötigst, dann gibt es noch Key2: und Key3:, weitere Informationen siehe Excel VB-Script Hilfe.
Gruß
Christian
Hallo Christian,
danke für deine Makros.
Nur bin ich leider ziemlich unbedarft, was die Materie angeht. Habe die Variante mit Spaltenüberschriften zuerst in mein bestehendes Makros und dann in ein neues Makro reinkopiert: Fast alle Zeilen (im Code) sind dann rot oder es kommt irgend eine Meldung.
Ich habe hier meinen Makro reinkopiert, der beim Öffnen eines Tabellenblattes ausgeführt wird. (Es sind im übrigen insgesamt 20 Blätter; Excel 2000)
Darf ich dich bitten, deinen Makro-Vorschlag in meinen bestehenden einzubinden?
Vielen Dank im voraus.
Gruß Lena
Public Sub Sort2()
ActiveSheet.Unprotect
ActiveWindow.ScrollRow = 187
Range(„B12:G230“).Select
Range(„G230“).Activate
Selection.Sort Key1:=Range(„G12“), Order1:=xlAscending, Key2:=Range(„B12“) _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom
ActiveWindow.ScrollRow = 8
Range(„A1:F1“).Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Zur Info:
Der zu Sortierende Bereich ist von B12 bis G230, wobei B12 bis G12 Überschriften enthält, und Sortierung zuerst nach Spalte G und dann nach Spalte B (beides aufsteigend) ausgeführt wird.
Aber für einen Makro-Experten ist das alles bestimmt aus dem Makro selbst zu erlesen.)
Und muss ich dann auch bei Excel-Objekten, sprich in das Code der einzelnen Tabellenblätter, etwas reinschreiben?
Für Tabellen mit
Spaltenbeschriftung
Private Sub
SortDataInWorkbook()
For Each objSheet In Worksheets
With objSheet
.Activate
.Protect Contents:=False
Range(Cells(1, 1), _
Cells(.UsedRange.Rows.Count,
.UsedRange.Columns.Count)).Sort _
Key1:=.Columns(1), _
Header:=xlGuess
Range(„A1“).Select
.Protect Contents:=True
End With
Next
Worksheets(1).Activate
End Sub
Hallo Lena,
dann probiere den mal (unten ist er nochmals unformartiert aber kopierbar
)
Private Sub Sort2()
For Each objSheet In Worksheets
With objSheet
.Activate
.Unprotect
Range("B12:G230").Sort \_
Key1:=.Columns("G"), Order1:=xlAscending, \_
Key2:=.Columns("B"), Order2:=xlAscending, \_
Header:=xlGuess, \_
OrderCustom:=1, \_
MatchCase:=False, \_
Orientation:=xlTopToBottom
Range("A1:F1").Select
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
Next
Worksheets(1).Activate
End Sub
**Private Sub Sort2()
For Each objSheet In Worksheets
With objSheet
.Activate
.Unprotect
Range(„B12:G230“).Sort _
Key1:=.Columns(„G“), Order1:=xlAscending, _
Key2:=.Columns(„B“), Order2:=xlAscending, _
Header:=xlGuess, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom
Range(„A1:F1“).Select
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End With
Next
Worksheets(1).Activate
End Sub**
Gruß
Christian
Und muss ich dann auch bei Excel-Objekten, sprich in das Code
der einzelnen Tabellenblätter, etwas reinschreiben?
Was willste denn noch reinschreiben
- in der Originalversion startet der Makro automatisch nach dem Öffnen der Tabelle und läuft alle enthaltenen Arbeitsblätter durch (For Each objSheet In Worksheets … Next), so war doch Deine Bedingung.
Wenn es nicht funktioniert, bimmel nochmal per E-Mail oder hier an.
Gruß
Christian
Hallo Christian,
ich hab´s geschafft! Habe ein Makro aufgezeichnet, welches alle Blätter nacheinander öffnet und wieder beim ersten landet!
Der Trick beim Aufzeichnen des Makros war, zwischen dem Nacheinander-Öffnen der einzelnen Blätter irgendwo im Blatt auf eine leere Zelle zu klicken. Also, Blatt 1 öffnen (Makro Sortieren wird ausgeführt) => klick in eine leere Zelle => Blatt 2 öffnen => klick in eine leere Zelle, usw.
Dieses Makro (den Namen) habe ich dann im Code bei „DieseArbeitsmappe“ reinkopiert, und nun führt Excel dieses Makro bereits beim Öffnen der Datei durch.
Juhui…
Ein unbeschreibliches Glücksgefühl, für mich als Neuling in der Makromaterie.
)))
Ich danke dir trotzdem für deine Mühe.
Gruß Lena